public static void SaveCalculatedData(FirmInstitutionCalculatedData calculatedData)
 {
     using (var context = new UpsilabEntities())
     {
         SaveCalculatedData(calculatedData);
     }
 }
        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");
                    }
                }
            }
        }
 public static void SaveCalculatedData(FirmInstitutionCalculatedData calculatedData, UpsilabEntities context)
 {
     if (calculatedData.idFirmInstitutionCalcatedData > 0)
     {
         context.FirmInstitutionCalculatedData.Attach(calculatedData);
         context.ObjectStateManager.ChangeObjectState(calculatedData, System.Data.EntityState.Modified);
         context.SaveChanges();
     }
     else
     {
         context.FirmInstitutionCalculatedData.Attach(calculatedData);
         context.ObjectStateManager.ChangeObjectState(calculatedData, System.Data.EntityState.Added);
         context.SaveChanges();                
     }
 }