コード例 #1
0
ファイル: SavingServices.cs プロジェクト: TalasZh/opencbs
        public int SaveContract(ISavingsContract saving, Client client, Action<SqlTransaction, int> action)
        {
            if (client == null)
                throw new OpenCbsTiersSaveException(OpenCbsTiersSaveExceptionEnum.TiersIsNull);

            ValidateSavingsContract(saving, client);

            int savingsCount = _savingManager.GetNumberOfSavings(client.Id);

            saving.GenerateSavingCode(
                client,
                savingsCount,
                ApplicationSettings.GetInstance(_user.Md5).SavingsCodeTemplate,
                ApplicationSettings.GetInstance(_user.Md5).ImfCode,
                client.Branch.Code
                );

            saving.Status = OSavingsStatus.Pending;

            if (((SavingBookContract) saving).UseTermDeposit)
            {
                ((SavingBookContract) saving).NextMaturity =
                    DateCalculationStrategy.GetNextMaturity(
                        saving.CreationDate,
                        ((SavingBookContract) saving).Product.Periodicity,
                        ((SavingBookContract) saving).NumberOfPeriods);
            }

            using (SqlConnection connection = _savingManager.GetConnection())
            using (SqlTransaction sqlTransaction = connection.BeginTransaction())
            {
                try
                {

                    saving.Id = _savingManager.Add(saving, client, sqlTransaction);
                    string code = saving.Code + '/' + saving.Id.ToString(CultureInfo.InvariantCulture);
                    _savingManager.UpdateSavingContractCode(saving.Id, code, sqlTransaction);
                    if (action != null) action(sqlTransaction, saving.Id);
                    sqlTransaction.Commit();

                    return saving.Id;
                }
                catch (Exception)
                {
                    sqlTransaction.Rollback();
                    throw;
                }
            }
        }