public static SignatureTransactionStatusLog Add(Guid signatureTransactionId, int documentStatusId, UpsilabEntities context)
        {
            var transactionstatut = new SignatureTransactionStatusLog
            {
                DateCreated = DateTime.Now,
                idDocumentStatus = documentStatusId,
                idSignatureTransaction = signatureTransactionId
            };

            context.SignatureTransactionStatusLog.AddObject(transactionstatut);
            context.SaveChanges();
            
            return transactionstatut;
        }
        public static SignatureTransaction UpdateTransactionStatus(Guid pTransactionId, DocumentBL.Status pStatus, DateTime? dateUpdated = null)
        {
            string status = pStatus.ToString();
            var transaction = new SignatureTransaction();

            using (UpsilabEntities context = new UpsilabEntities())
            {
                context.Connection.Open();
                using (var dbContextTransaction = context.Connection.BeginTransaction())
                {
                    try
                    {
                        //1- Update Transaction status
                        transaction = context.SignatureTransaction.FirstOrDefault(x => x.idSignatureTransaction == pTransactionId);
                        transaction.Status = status;

                        //2- Update latest transaction status
                        var calculatedData = FirmInstitutionBL.GetCalculatedData(transaction.idFirmInstitution.Value);
                        if (calculatedData != null)
                        {
                            if (transaction.SignatureTransactionType == SignatureTransactionType.CONVENTION.ToString())
                            {
                                calculatedData.ConventionLatestStatus = status;
                                if (pStatus == DocumentBL.Status.Completed)
                                {
                                    calculatedData.ConventionDateUpdated = (dateUpdated == null) ? DateTime.Now : dateUpdated;
                                    calculatedData.HasDataInCoffre = true;
                                    calculatedData.AvenantLatestStatus = DocumentBL.Status.Created.ToString(); //activer le bouton "Avenant"
                                }
                            }
                            else if (transaction.SignatureTransactionType == SignatureTransactionType.AVENANT.ToString())
                            {
                                calculatedData.AvenantLatestStatus = status;
                                if (pStatus == DocumentBL.Status.Completed)
                                {
                                    calculatedData.AvenantDateUpdated = (dateUpdated == null) ? DateTime.Now : dateUpdated;
                                    calculatedData.HasDataInCoffre = true;
                                }
                            }

                            FirmInstitutionBL.SaveCalculatedData(calculatedData, context);
                        }

                        //If "InProgress", clear email de rappel ?
                        if (pStatus == DocumentBL.Status.InProgress)
                        {
                            transaction.DateSignaturesObjet = null;
                            transaction.DatesReminderEmail = null;
                        }


                        //Log transaction status
                        var documentStatus = DocumentStatusBL.GetByCode(status);

                        var signatureTransactionStatusLog = new SignatureTransactionStatusLog
                        {
                            DateCreated = DateTime.Now,
                            idDocumentStatus = documentStatus.idDocumentStatus,
                            idSignatureTransaction = pTransactionId
                        };

                        context.SignatureTransactionStatusLog.AddObject(signatureTransactionStatusLog);
                        context.SaveChanges();
                        //
                        //
                        //
                        dbContextTransaction.Commit();
                    }
                    catch (Exception e)
                    {
                        dbContextTransaction.Rollback();
                        Log.Log.AppendException(e);
                        throw new Exception("SavingError");
                    }
                }
            }

            return transaction;
        }