/// <summary> /// Création du Feuillet des Individuels /// </summary> /// <param name="_sessionContent"></param> public void createTrombiFratrieSeules(SessionContent _sessionContent) { Log.Debug("createTrombiGroup ." + _sessionContent.InfoClass.nameClass + " " + _sessionContent.InfoClass.PrefixeGroup); PdfPage page = p_pdfDocument.AddPage(); page.Size = PageSize.A4; page.Orientation = PageOrientation.Landscape; XGraphics gfx = XGraphics.FromPdfPage(page); this.createSchoolName(gfx, p_appClass.School.SchoolName + " " + p_appClass.School.City); this.createClassName(gfx, "Fratries"); // Maintenant il faut balayer tous les élèves int _indRow = 0; int _indCol = 0; foreach (Person _person in _sessionContent.ListElement) { if (_indCol == 10) { _indRow++; _indCol = 0; } if (_person.Passed) { foreach (FilePhoto _photo in _person.Photos) { if (_photo.Selected) { string _thumbDir = p_appClass.RootDir + "\\" + p_appClass.Param.ExportDirectory + "\\" + _photo.ClassName + "\\Thumbnails\\" + _photo.FileName; this.DrawPng(gfx, _indRow, _indCol, _thumbDir); this.drawName(gfx, _indRow, _indCol, _person.ToString()); _indCol++; } } } } }
/// <summary> /// Retourne la liste des individus /// </summary> /// <param name="_sessionContent"></param> /// <returns></returns> private static List<IElement> getListIndiv(SessionContent _sessionContent) { List<IElement> p_listElement = new List<IElement>(); foreach (Person _person in _sessionContent.ListElement) { if (!_person.PoseB) { p_listElement.Add(_person); } } return p_listElement; }
/// <summary> /// Retourne la liste des individus passés /// </summary> /// <param name="_sessionContent"></param> /// <returns></returns> private static List<IElement> getListIndivPassed(SessionContent _sessionContent) { List<IElement> p_listElement = new List<IElement>(); foreach (Person _person in _sessionContent.ListElement) { if (!_person.PoseB && (_person.Absent.Equals(Constantes.cstNon)) && (_person.InfosPDV.NbExemplaires >= 1)) { p_listElement.Add(_person); } } return p_listElement; }
/// <summary> /// Chargement du fichier Session /// </summary> /// <param name="_fileName"></param> private static SessionContent loadSessionFile(string _fileName) { SessionContent p_sessionContent = new SessionContent(); Log.Debug("--- FileInfo : " + _fileName); FileInfo _file = new FileInfo(_fileName); if (_file.Exists) { try { Log.Debug("--- Désérialization : " + _fileName); Stream stream = File.Open(_fileName, FileMode.Open); BinaryFormatter bFormatter = new BinaryFormatter(); p_sessionContent = (SessionContent)bFormatter.Deserialize(stream); stream.Close(); Log.Debug("--- Fin Désérialization : " + _fileName); } catch (Exception e) { System.Windows.Forms.MessageBox.Show("Une erreur est survenue lors du chargement de la Session de Base.\r\nMessage : " + e.Message, "Anomalie lors du chargement !", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error); throw; } } return p_sessionContent; }
/// <summary> /// Chargement du fichier Session /// </summary> /// <param name="_fileName"></param> private void loadSessionFile(string _fileName) { Log.Info("Chargement du fichier de Session {" + _fileName + "}"); FileInfo _file = new FileInfo(_fileName); if (_file.Exists) { try { Stream stream = File.Open(_fileName, FileMode.Open); BinaryFormatter bFormatter = new BinaryFormatter(); p_sessionContent = (SessionContent)bFormatter.Deserialize(stream); stream.Close(); } catch (Exception e) { Log.Error("Erreur lors du chargement de la Session", e); System.Windows.Forms.MessageBox.Show("Une erreur est survenue lors du chargement de la Session de Base.\r\nMessage : " + e.Message, "Anomalie lors du chargement !", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error); throw; } } }
/// <summary> /// Création du Feuillet GROUPES PNG /// </summary> /// <param name="_sessionContent"></param> public void createReportGroup(SessionContent _sessionContent) { #region DEFINITION DE LA LIGNE DE RUPTURE HSSFCellStyle cellRuptStyle = (HSSFCellStyle)p_templateWorkbook.CreateCellStyle(); cellRuptStyle.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin; cellRuptStyle.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin; cellRuptStyle.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin; cellRuptStyle.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin; cellRuptStyle.FillBackgroundColor = HSSFColor.Green.Index; cellRuptStyle.FillPattern = NPOI.SS.UserModel.FillPattern.SolidForeground; HSSFFont _font = (HSSFFont)p_templateWorkbook.CreateFont(); _font.FontName = "Segoe UI"; _font.FontHeightInPoints = 12; _font.Color = HSSFColor.White.Index; cellRuptStyle.SetFont(_font); #endregion // Getting the worksheet by its name... HSSFSheet sheet = (HSSFSheet)p_templateWorkbook.GetSheet("Groupes PNG"); // On fait une Ligne de rupture pour la Classe HSSFRow dataRow = (HSSFRow)sheet.CreateRow(p_numRow); this.createCell(dataRow, cellRuptStyle, 0, _sessionContent.InfoClass.nameClass + " " + _sessionContent.InfoClass.PrefixeGroup); // Nom de la Classe sheet.AddMergedRegion(new CellRangeAddress(p_numRow, p_numRow, 0, 4)); p_numRow++; // Maintenant il faut balayer tous les élèves foreach (Group _group in _sessionContent.ListElement) { HSSFRow dataGroup = (HSSFRow)sheet.CreateRow(p_numRow); HSSFCellStyle cellStyle = this.getStyleFromRowNum(p_numRow); this.createCell(dataGroup, cellStyle, 0, _group.Class); // Nom de la Classe this.createCell(dataGroup, cellStyle, 1, _group.Name); // Nom du Groupe if (_group.Passed) { // Photo Gratuite if (_group.InfosPDV.IsGratis) { this.createCell(dataGroup, cellStyle, 2, Constantes.cstOui); } else { this.createCell(dataGroup, cellStyle, 2, String.Empty); } this.createCell(dataGroup, cellStyle, 3, _group.InfosPDV.NbExemplaires); // Nombre d'exemplaires this.createCell(dataGroup, cellStyle, 4, _group.InfosPDV.Commentaires); } else { this.createCell(dataGroup, cellStyle, 2, String.Empty); this.createCell(dataGroup, cellStyle, 3, String.Empty); this.createCell(dataGroup, cellStyle, 4, _group.InfosPDV.Commentaires); } p_numRow++; } this.definePrintSetup(sheet, "Bon de Production : Groupes PNG.", (short)90); }
/// <summary> /// Retourne la liste des individus Absents /// </summary> /// <param name="_sessionContent"></param> /// <returns></returns> private static List<IElement> getListIndivMissed(SessionContent _sessionContent) { List<IElement> p_listElement = new List<IElement>(); foreach (Person _person in _sessionContent.ListElement) { if (!_person.PoseB && (_person.Absent.Equals(Constantes.cstOui))) { p_listElement.Add(_person); } } return p_listElement; }
/// <summary> /// Création du Feuillet FRATRIES Seules /// </summary> /// <param name="_sessionContent"></param> public void createReportFratrieSeules(SessionContent _sessionContent) { // Maintenant il faut balayer tous les élèves foreach (Person _person in _sessionContent.ListElement) { if (_person.Passed && (_person.InfosPDV.ListClassID.Count == 0)) { HSSFRow dataOrder = (HSSFRow)p_sheet.CreateRow(p_numRow); ICell _newCell = dataOrder.CreateCell(0); _newCell.SetCellValue(this.getPhotoName(_person, "FS")); _newCell = dataOrder.CreateCell(1); // PhotoID _newCell.SetCellValue("00000000"); _newCell = dataOrder.CreateCell(2); // Classe _newCell.SetCellValue(_person.Class); _newCell = dataOrder.CreateCell(4); // Pochette Complète _newCell.SetCellValue(_person.InfosPDV.NbExemplaires.ToString()); p_numRow++; } } }
/// <summary> /// Création du Feuillet FRATRIES Seules /// </summary> /// <param name="_sessionContent"></param> public void createReportFratrieProdLab(SessionContent _sessionContent) { // Getting the worksheet by its name... HSSFSheet sheet = (HSSFSheet)p_templateWorkbook.GetSheet("ProdLab"); // Maintenant il faut balayer tous les élèves foreach (Person _person in _sessionContent.ListElement) { if (_person.Passed) { HSSFRow dataGroup = (HSSFRow)sheet.CreateRow(p_numRowProdLab); HSSFCellStyle cellStyle = this.getStyleFromRowNum(p_numRowProdLab); this.createCell(dataGroup, cellStyle, 0, _person.Class); // Classe de la Fratrie this.createCell(dataGroup, cellStyle, 1, _person.Name); // Nom de la Fratrie this.createCell(dataGroup, cellStyle, 2, _person.FirstName); // Prénom de la Fratrie p_numRowProdLab++; } } }
/// <summary> /// Création du Feuillet FRATRIES Seules /// </summary> /// <param name="_sessionContent"></param> public void createReportFratrieSeules(SessionContent _sessionContent) { // Getting the worksheet by its name... HSSFSheet sheet = (HSSFSheet)p_templateWorkbook.GetSheet("Fratries Seules"); // On met à jour les infos Sur les FS rattachées dans chaque classe foreach (InfosClasse _infoClass in p_appClass.School.ListClass) { _infoClass.Counters.NbRattFS = 0; } // Maintenant il faut balayer tous les élèves foreach (Person _person in _sessionContent.ListElement) { if (_person.Passed && (_person.InfosPDV.ListClassID.Count == 0)) { HSSFRow dataGroup = (HSSFRow)sheet.CreateRow(p_numRow); HSSFCellStyle cellStyle = this.getStyleFromRowNum(p_numRow); this.createCell(dataGroup, cellStyle, 0, _person.Name); // Nom de la Fratrie // Photo Gratuite if (_person.InfosPDV.IsGratis) { this.createCell(dataGroup, cellStyle, 1, Constantes.cstOui); } else { this.createCell(dataGroup, cellStyle, 1, String.Empty); } this.createCell(dataGroup, cellStyle, 2, _person.InfosPDV.NbExemplaires); // Nombre d'exemplaires this.createCell(dataGroup, cellStyle, 3, _person.InfosPDV.Commentaires); p_numRow++; } } this.definePrintSetup(sheet, "Bon de Production : Fratries Seules.", (short)90); }
/// <summary> /// Création du Feuillet FRATRIES Rattachées /// </summary> /// <param name="_sessionContent"></param> public void createReportFratrieRatt(SessionContent _sessionContent) { // Getting the worksheet by its name... HSSFSheet sheet = (HSSFSheet)p_templateWorkbook.GetSheet("Fratries Rattachées"); // On met à jour les infos Sur les FS rattachées dans chaque classe foreach (InfosClasse _infoClass in p_appClass.School.ListClass) { _infoClass.Counters.NbRattFS = 0; } // Maintenant il faut balayer tous les élèves foreach (Person _person in _sessionContent.ListElement) { if (_person.Passed && (_person.InfosPDV.ListClassID.Count > 0)) { HSSFRow dataGroup = (HSSFRow)sheet.CreateRow(p_numRow); HSSFCellStyle cellStyle = this.getStyleFromRowNum(p_numRow); this.createCell(dataGroup, cellStyle, 0, _person.Name); // Nom de la Fratrie // Photo Gratuite if (_person.InfosPDV.IsGratis) { this.createCell(dataGroup, cellStyle, 1, Constantes.cstOui); } else { this.createCell(dataGroup, cellStyle, 1, String.Empty); } this.createCell(dataGroup, cellStyle, 2, _person.InfosPDV.NbExemplaires); // Nombre d'exemplaires StringBuilder _cellClassName = new StringBuilder(); foreach (string _class in _person.InfosPDV.ListClassID) { if (!String.IsNullOrEmpty(_class)) { int _classID; if (int.TryParse(_class, out _classID)) { InfosClasse _infoClass = p_appClass.School.GetClasse(_classID); _infoClass.Counters.NbRattFS++; _cellClassName.AppendLine("{" + _infoClass.nameClass + "}"); } } } string _valueOfCell = String.Empty; if (_cellClassName.Length > 0) { _valueOfCell = _cellClassName.ToString().Substring(0, _cellClassName.Length- 2); } this.createCellRichText(dataGroup, cellStyle, 3, _valueOfCell); this.createCell(dataGroup, cellStyle, 4, _person.InfosPDV.Commentaires); p_numRow++; } } this.definePrintSetup(sheet, "Bon de Production : Fratries Rattachées.", (short)90); }
/// <summary> /// Initialisation de la Session Individuelle /// </summary> public void InitSession(ApplClass _applClass, InfosClasse _classSession, string _typeSession, DateTime _dateSession) { Log.Debug("Initialisation de la Session : " + _classSession.nameClass + " {" + _typeSession + "}"); p_typeSession = _typeSession; #region Gestion du fichier FileInfo _file = this.getFileName(p_typeSession, _classSession.idClass, _applClass.DataDir, _dateSession); _fileName = _file.FullName; // Si le fichier de la session existe, on le lit // Sinon, on le créé if (_file.Exists) { #region Chargement Fichier session try { Stream stream = File.Open(_fileName, FileMode.Open); BinaryFormatter bFormatter = new BinaryFormatter(); p_sessionContent = (SessionContent)bFormatter.Deserialize(stream); stream.Close(); } catch (Exception e) { Log.Error("Erreur chargement de la Session", e); System.Windows.Forms.MessageBox.Show("Une erreur est survenue lors du chargement de la Session de Base.\r\nMessage : " + e.Message, "Anomalie lors du chargement !", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error, System.Windows.Forms.MessageBoxDefaultButton.Button1, System.Windows.Forms.MessageBoxOptions.RightAlign); throw; } #endregion } else { #region Création de la Session Log.Info("Création de la Session"); p_sessionContent = new SessionContent(); p_sessionContent.InfoClass = _classSession; p_sessionContent.Effectif = 0; // On crée la liste des éléments à partir de la liste des élèves (et Profs) p_sessionContent.DateSession = _dateSession.ToString("dd-MM-yyyy"); p_sessionContent.TypeSession = p_typeSession; p_sessionContent.ListElement = new List<IElement>(); // On balaye l'ensemble des Individus int _newId = ClassOutils.getMaxId(_applClass.School.getListFromType(Constantes.cstIndividu)); // A ce niveau-ci, dans le cadre d'une session Fratrie, il faut initialiser la liste avec la liste des noms des élèves if (_typeSession.Equals(Constantes.cstFratrie)) { Log.Info("Session FRATRIE"); _newId = 1; // On créé une liste triée... et on renomme les doublons façon Windows List<IElement> __sortedList = new List<IElement>(_applClass.School.getListFromType(Constantes.cstIndividu).Count); _applClass.School.getListFromType(Constantes.cstIndividu).ForEach(item => { __sortedList.Add((IElement)item.Clone()); }); __sortedList = __sortedList.OrderBy(o => o.Name).ToList(); string _nameKey = ""; int numDoub = 0; for (int _ind = 0; _ind <= __sortedList.Count - 1; _ind++) { if (_nameKey != __sortedList[_ind].Name) { numDoub = 0; _nameKey = __sortedList[_ind].Name; } else { numDoub++; __sortedList[_ind].Name += " (" + numDoub.ToString() + ")"; } } // On récupère l'ensemble des élèves foreach (IElement _element in __sortedList) { if (!((Person)_element).TypePerson.Equals(Constantes.cstProf)) { Person _newElement = (Person)_element.Clone(); _newElement.FirstName = String.Empty; _newElement.Id = _newId.ToString("D4"); _newElement.Photos = new List<FilePhoto>(); _newElement.InfosPDV = new InfoPdV(); _newElement.NumElement = _newId; _newElement.Passed = false; _newElement.Absent = Constantes.cstNon; _newElement.Class = _classSession.nameClass; _newElement.ClassId = _classSession.idClass; // Il faut vérifier que l'élément n'existe pas déjà (en cas de doublons) // Si il existe, on flag le second... p_sessionContent.ListElement.Add(_newElement); _newId++; } } } else { Log.Info("Session Individuels"); foreach (IElement _element in _applClass.School.getListFromType(p_typeSession)) { if (_element.ClassId.Equals(_classSession.idClass)) { _element.Passed = false; _element.Photos = new List<FilePhoto>(); _element.Class = _classSession.nameClass; p_sessionContent.ListElement.Add(_element); // Dans le cas où on est en double vue on duplique l'élément if (_applClass.School.DoubleView && p_sessionContent.TypeSession == Constantes.cstIndividu) { IElement _newElement = (IElement)_element.Clone(); //_newElement.Id = (_newId++).ToString("D4"); _newElement.Id = _newElement.Id + "B"; //_newElement.Name += "_BIS"; _newElement.FirstName += "(BIS)"; _newElement.Photos = new List<FilePhoto>(); _newElement.InfosPDV = new InfoPdV(); p_sessionContent.ListElement.Add(_newElement); } } } } Log.Debug("Nb Eléments dans la nouvelle session = "); #endregion } if (p_sessionContent.InfoClass == null) { p_sessionContent.InfoClass = _classSession; } // On met à jour les infos Class p_sessionContent.InfoClass.PrefixeGroup = _classSession.PrefixeGroup; p_sessionContent.InfoClass = _classSession; // En cas de renumérotation de la classe on modifie les noms de classe foreach (IElement _element in p_sessionContent.ListElement) { // On met à jour le nom de la classe si elle a changé... if (!_element.Class.Equals(_classSession.nameClass)) { _element.Class = _classSession.nameClass; foreach (FilePhoto _photo in _element.Photos) { _photo.ClassName = _classSession.nameClass; } } } // Il faut maintenant fusionner la liste des individus de la session avec celle de l'école pour resynchroniser les deux... // On balaye l'ensemble des Individus // pour les fratries, on fait un traitement spécifique // Il faut balayer tous les élèves et si le nom n'esxiste pas dans la liste des fratries, on l'ajoute Log.Info("Fusion des individus de la session avec la liste des élèves de l'école ..."); if (_typeSession.Equals(Constantes.cstFratrie)) { #region Synchronisation Fratries foreach (IElement _element in _applClass.School.getListPerson(Constantes.cstEleve)) { if (!this.IsFratrieExist(_element)) { Person _newElement = (Person)_element.Clone(); int _maxFraId = ClassOutils.getMaxId(p_sessionContent.ListElement); _newElement.Id = _maxFraId.ToString("D4"); _newElement.FirstName = String.Empty; _newElement.Photos = new List<FilePhoto>(); _newElement.InfosPDV = new InfoPdV(); _newElement.NumElement = _maxFraId; _newElement.Class = _classSession.nameClass; _newElement.ClassId = _classSession.idClass; _newElement.Passed = false; _newElement.Absent = Constantes.cstNon; p_sessionContent.ListElement.Add(_newElement); } } #endregion } else { #region Synchronisation Individus foreach (IElement _element in _applClass.School.getListFromType(p_typeSession)) { if (_element.ClassId.Equals(_classSession.idClass)) { if (!this.IsElementExist(_element)) { _element.Passed = false; _element.Photos = new List<FilePhoto>(); _element.Class = _classSession.nameClass; p_sessionContent.ListElement.Add(_element); // Dans le cas où on est en double vue on duplique l'élément if (_applClass.School.DoubleView && p_sessionContent.TypeSession == Constantes.cstIndividu) { IElement _newElement = (IElement)_element.Clone(); int _maxId = ClassOutils.getMaxId(p_sessionContent.ListElement); _maxId++; //_newElement.Id = _maxId.ToString("D4"); _newElement.Id = _element.Id + "B"; //_newElement.Name += "_BIS"; _newElement.FirstName += "(BIS)"; _newElement.Photos = new List<FilePhoto>(); _newElement.InfosPDV = new InfoPdV(); p_sessionContent.ListElement.Add(_newElement); } } else { // On met à jour le nom de la classe si elle a changé... if (!_element.Class.Equals(_classSession.nameClass)) { _element.Class = _classSession.nameClass; } } } } #endregion } Log.Info("Nb total Eléments = "); // On trie la liste finale p_sessionContent.ListElement = p_sessionContent.ListElement.OrderBy(o => o.KeyAsc).ToList(); #endregion }
/// <summary> /// Sauvegarde la session en cours /// </summary> protected void SaveSession(SessionContent _sessionContent) { Log.Info("Sauvegarde de la Session"); Stream stream = File.Open(_fileName, FileMode.Create); BinaryFormatter bf = new BinaryFormatter(); bf.Serialize(stream, _sessionContent); stream.Close(); }