/// <summary>
 /// Adds the fixed asset ledger entity.
 /// </summary>
 /// <param name="fAArmortizationDetail">The f a armortization detail.</param>
 /// <param name="fixedAssetLedger">The fixed asset ledger.</param>
 /// <returns></returns>
 private static FixedAssetLedgerEntity AddFixedAssetLedgerEntity(FAArmortizationDetailEntity fAArmortizationDetail, FixedAssetLedgerEntity fixedAssetLedger)
 {
     if (fAArmortizationDetail.AccountNumber.Contains("366"))
     {
         fixedAssetLedger.BudgetSourceAccount = fAArmortizationDetail.AccountNumber;
         fixedAssetLedger.ExchangeRate        = (decimal)fAArmortizationDetail.ExchangeRate;
         if (fAArmortizationDetail.CurrencyCode.Equals("USD"))
         {
             fixedAssetLedger.BudgetSourcelDebitAmount         += fAArmortizationDetail.AmountOC;
             fixedAssetLedger.BudgetSourcelDebitAmountExchange += fAArmortizationDetail.AmountOC;
         }
         else
         {
             fixedAssetLedger.BudgetSourcelDebitAmount         += fAArmortizationDetail.AmountOC;
             fixedAssetLedger.BudgetSourcelDebitAmountExchange += fAArmortizationDetail.AmountExchange;
         }
     }
     //if (fAArmortizationDetail.CorrespondingAccountNumber.Contains("2141") || fAArmortizationDetail.CorrespondingAccountNumber.Contains("2143"))
     if (fAArmortizationDetail.CorrespondingAccountNumber.Contains("2141") || fAArmortizationDetail.CorrespondingAccountNumber.Contains("2142")) // thông tư mới lấy đầu 2141 và 2142
     {
         fixedAssetLedger.DepreciationAccount = fAArmortizationDetail.CorrespondingAccountNumber;
         if (fAArmortizationDetail.CurrencyCode.Equals("USD"))
         {
             fixedAssetLedger.DepreciationCreditAmount         += fAArmortizationDetail.AmountOC;
             fixedAssetLedger.DepreciationCreditAmountExchange += fAArmortizationDetail.AmountOC;
         }
         else
         {
             fixedAssetLedger.DepreciationCreditAmount         += fAArmortizationDetail.AmountOC;
             fixedAssetLedger.DepreciationCreditAmountExchange += fAArmortizationDetail.AmountExchange;
         }
     }
     return(fixedAssetLedger);
 }
 /// <summary>
 /// Takes the specified f a armortization.
 /// </summary>
 /// <param name="fAArmortization">The f a armortization.</param>
 /// <returns></returns>
 private static object[] Take(FAArmortizationDetailEntity fAArmortization)
 {
     return(new object[]
     {
         @"RefDetailID", fAArmortization.RefDetailId,
         @"RefID", fAArmortization.RefId,
         @"FixedAssetID", fAArmortization.FixedAssetId,
         @"AccountNumber", fAArmortization.AccountNumber,
         @"CorrespondingAccountNumber", fAArmortization.CorrespondingAccountNumber,
         @"Description", fAArmortization.Description,
         @"Quantity", fAArmortization.Quantity,
         @"CurrencyCode", fAArmortization.CurrencyCode,
         @"ExchangeRate", fAArmortization.ExchangeRate,
         @"AmountOC", fAArmortization.AmountOC,
         @"AmountExchange", fAArmortization.AmountExchange,
         @"VoucherTypeID", fAArmortization.VoucherTypeId,
         @"BudgetSourceCode", fAArmortization.BudgetSourceCode,
         @"BudgetItemCode", fAArmortization.BudgetItemCode,
         @"BudgetChapterCode", fAArmortization.BudgetChapterCode,
         @"BudgetCategoryCode", fAArmortization.BudgetCategoryCode,
         @"DepartmentID", fAArmortization.DepartmentId,
         @"ProjectID", fAArmortization.ProjectId,
         @"AutoBusinessId", fAArmortization.AutoBusinessId
     });
 }
        /// <summary>
        /// Inserts the account balance.
        /// </summary>
        /// <param name="faArmortizationEntity">The fa armortization entity.</param>
        /// <param name="faArmortizationDetailEntity">The fa armortization detail entity.</param>
        public void InsertAccountBalance(FAArmortizationEntity faArmortizationEntity, FAArmortizationDetailEntity faArmortizationDetailEntity)
        {
            //insert AccountBalance for debit account
            var accountBalanceForDebit     = AddAccountBalanceForDebit(faArmortizationEntity, faArmortizationDetailEntity);
            var accountBalanceForDebitExit = AccountBalanceDao.GetExitsAccountBalance(accountBalanceForDebit);

            if (accountBalanceForDebitExit != null)
            {
                UpdateAccountBalance(accountBalanceForDebitExit, accountBalanceForDebit.MovementDebitAmountOC,
                                     accountBalanceForDebit.MovementDebitAmountExchange, true, 1);
            }
            else
            {
                AccountBalanceDao.InsertAccountBalance(accountBalanceForDebit);
            }

            //insert AccountBalance for credit account
            var accountBalanceForCredit     = AddAccountBalanceForCredit(faArmortizationEntity, faArmortizationDetailEntity);
            var accountBalanceForCreditExit = AccountBalanceDao.GetExitsAccountBalance(accountBalanceForCredit);

            if (accountBalanceForCreditExit != null)
            {
                UpdateAccountBalance(accountBalanceForCreditExit, accountBalanceForCredit.MovementCreditAmountOC,
                                     accountBalanceForCredit.MovementCreditAmountExchange, true, 2);
            }
            else
            {
                AccountBalanceDao.InsertAccountBalance(accountBalanceForCredit);
            }
        }
 /// <summary>
 /// Adds the account balance for credit.
 /// </summary>
 /// <param name="faArmortizationEntity">The fa armortization entity.</param>
 /// <param name="faArmortizationDetailEntity">The fa armortization detail entity.</param>
 /// <returns></returns>
 public AccountBalanceEntity AddAccountBalanceForCredit(FAArmortizationEntity faArmortizationEntity, FAArmortizationDetailEntity faArmortizationDetailEntity)
 {
     //credit account
     return(new AccountBalanceEntity
     {
         BalanceDate = faArmortizationEntity.PostedDate,
         CurrencyCode = faArmortizationDetailEntity.CurrencyCode,
         ExchangeRate = (decimal)faArmortizationDetailEntity.ExchangeRate,
         AccountNumber = faArmortizationDetailEntity.CorrespondingAccountNumber,
         MovementCreditAmountOC = faArmortizationDetailEntity.AmountOC,
         MovementCreditAmountExchange = faArmortizationDetailEntity.AmountExchange,
         BudgetSourceCode = faArmortizationDetailEntity.BudgetSourceCode,
         BudgetItemCode = faArmortizationDetailEntity.BudgetItemCode,
         ProjectId = faArmortizationDetailEntity.ProjectId,
         MovementDebitAmountOC = 0,
         MovementDebitAmountExchange = 0
     });
 }
 /// <summary>
 /// Adds the journal entry account.
 /// </summary>
 /// <param name="faArmortizationEntity">The fa armortization entity.</param>
 /// <param name="faArmortizationDetailEntity">The fa armortization detail entity.</param>
 /// <returns></returns>
 public JournalEntryAccountEntity AddJournalEntryAccount(FAArmortizationEntity faArmortizationEntity, FAArmortizationDetailEntity faArmortizationDetailEntity)
 {
     return(new JournalEntryAccountEntity
     {
         RefId = faArmortizationEntity.RefId,
         RefTypeId = faArmortizationEntity.RefTypeId,
         RefNo = faArmortizationEntity.RefNo,
         RefDate = faArmortizationEntity.RefDate,
         PostedDate = faArmortizationEntity.PostedDate,
         JournalMemo = faArmortizationEntity.JournalMemo,
         CurrencyCode = faArmortizationDetailEntity.CurrencyCode,
         ExchangeRate = (decimal)faArmortizationDetailEntity.ExchangeRate,
         BankAccount = null,
         RefDetailId = faArmortizationDetailEntity.RefDetailId,
         AccountNumber = faArmortizationDetailEntity.AccountNumber,
         CorrespondingAccountNumber = faArmortizationDetailEntity.CorrespondingAccountNumber,
         AmountOc = faArmortizationDetailEntity.AmountOC,
         Description = faArmortizationDetailEntity.Description,
         AmountExchange = faArmortizationDetailEntity.AmountExchange,
         BudgetSourceCode = faArmortizationDetailEntity.BudgetSourceCode,
         BudgetItemCode = faArmortizationDetailEntity.BudgetItemCode,
         AccountingObjectId = null,
         MergerFundId = null,
         VoucherTypeId = faArmortizationDetailEntity.VoucherTypeId,
         ProjectId = faArmortizationDetailEntity.ProjectId
     });
 }
        /// <summary>
        /// Inserts the fa armortization detail.
        /// </summary>
        /// <param name="fAArmortizationDetail">The f a armortization detail.</param>
        /// <returns></returns>
        public int InsertFAArmortizationDetail(FAArmortizationDetailEntity fAArmortizationDetail)
        {
            const string sql = @"uspInsert_FixedAssetArmortizationDetail";

            return(Db.Insert(sql, true, Take(fAArmortizationDetail)));
        }