/// <summary>
        /// 
        /// </summary>
        /// <param name="transactionType">CONVENTION or AVENANT</param>
        /// <returns></returns>
        public static List<string> GetDocumentTypes(SignatureTransactionType transactionType)
        {
            var listDocumentTypes = new List<string>();

            if (transactionType == SignatureTransactionType.CONVENTION)
            {
                var conventDocumentTypes = new List<string>() 
                    {  
                        ElectronicSafeDocumentBL.DocumentType.CPART.ToString(),
                        ElectronicSafeDocumentBL.DocumentType.CINT.ToString(),
                        ElectronicSafeDocumentBL.DocumentType.CCOURT.ToString(),
                        ElectronicSafeDocumentBL.DocumentType.CCOMP.ToString(),
                        //ElectronicSafeDocumentBL.DocumentType.CMD.ToString(),
                    };

                listDocumentTypes = conventDocumentTypes;
            }

            else if (transactionType == SignatureTransactionType.AVENANT)
            {
                var avenantDocumentTypes = new List<string>() 
                    {  
                        ElectronicSafeDocumentBL.DocumentType.APART.ToString(),
                        ElectronicSafeDocumentBL.DocumentType.AINT.ToString(),
                        ElectronicSafeDocumentBL.DocumentType.ACOURT.ToString(),
                        ElectronicSafeDocumentBL.DocumentType.AVENANT.ToString(),
                    };

                listDocumentTypes = avenantDocumentTypes;
            }

            return listDocumentTypes;

        }
        public static SignatureTransaction CreateTransaction(Guid idUserCreated, Guid idFirmInstitutionCGP,  SignatureTransactionType transactionType)
        {
            using (UpsilabEntities context = new UpsilabEntities())
            {
                context.Connection.Open();
                using (var dbContextTransaction = context.Connection.BeginTransaction())
                {
                    try
                    {
                        //1- Create transaction ---------------------------------------------------------
                        var transaction = new SignatureTransaction
                        {
                            idFirmInstitution = idFirmInstitutionCGP,
                            idSignatureTransaction = GuidHelper.GenerateGuid(),
                            idUserCreated = idUserCreated,
                            SignatureTransactionType = transactionType.ToString(),
                            DateCreated = DateTime.Now,
                            Status = DocumentBL.Status.InProgress.ToString(),
                            DocumentsInitialized = false,
                        };
                       
                        context.SignatureTransaction.AddObject(transaction);
                        context.SaveChanges();

                        //2- Signature Transaction Status ----------------------------------------------- 
                        var status = DocumentStatusBL.GetByCode(DocumentBL.Status.InProgress.ToString());
                        SignatureTransactionStatutBL.Add(transaction.idSignatureTransaction, status.idDocumentStatus, context);

                        //Update status in FirmInstitutionCalculatedData
                        var calculatedData = FirmInstitutionBL.GetCalculatedData(idFirmInstitutionCGP);
                        if (calculatedData == null)
                        {
                            calculatedData = new FirmInstitutionCalculatedData()
                            {
                                idFirmInstitution = idFirmInstitutionCGP
                            };
                        }

                        if (transactionType == SignatureTransactionType.CONVENTION)
                        {
                            calculatedData.ConventionLatestStatus = DocumentBL.Status.InProgress.ToString();
                        }
                        else if (transactionType == SignatureTransactionType.AVENANT)
                        {
                            calculatedData.AvenantLatestStatus = DocumentBL.Status.InProgress.ToString();
                        }

                        FirmInstitutionBL.SaveCalculatedData(calculatedData, context);

                        //3- Add the 4 documents automatically : CPART, CINT, CCOURT, CMD ---------------
                        if (transactionType == SignatureTransactionType.CONVENTION)
                        {
                            var listDocumentTypes = GetDocumentTypes(SignatureTransactionType.CONVENTION);
                            if (listDocumentTypes != null)
                                DocumentBL.AddDocuments(transaction.idSignatureTransaction, listDocumentTypes, context);
                        }

                        //4- Create signatory ------------------------------------------------------------
                        //CGP
                        var firmAdviser = FirmInstitutionAdviserBL.GetDefaultSignatory(idFirmInstitutionCGP);
                        if (firmAdviser != null)
                        {
                            SignatoryBL.CreateSignatory(transaction.idSignatureTransaction, firmAdviser.User.idUser, SignatoryBL.Roles.CGP.ToString(), context);
                        }

                        //SDG
                        SignatoryBL.CreateSignatory(transaction.idSignatureTransaction, idUserCreated, SignatoryBL.Roles.SDG.ToString(), context);
                      
                        //5- Commit transaction ----------------------------------------------------------
                        dbContextTransaction.Commit();

                        //6- Reload transaction ----------------------------------------------------------
                        transaction = DocumentSignatureTransactionBL.GetTransactionByCGP(idFirmInstitutionCGP, transactionType.ToString());

                        return transaction;
                    }
                    catch (Exception e)
                    {
                        dbContextTransaction.Rollback();
                        Log.Log.AppendException(e);
                        throw new Exception("SavingError");
                    }
                }
            }
        }