public tbt_RateConversion CreateNewRow(string targetDate, string bankRateRupiah, string taxRateRupiah, string bankRateDollar, string taxRateDollar)
        {
            tbt_RateConversion row = new tbt_RateConversion();

            row.TargetDate = DateTime.Parse(targetDate);

            if (!CommonUtil.IsNullOrEmpty(bankRateRupiah))
            {
                row.BankRateRupiahPerDollar = Math.Round(decimal.Parse(bankRateRupiah), 2, MidpointRounding.AwayFromZero);
            }
            if (!CommonUtil.IsNullOrEmpty(taxRateRupiah))
            {
                row.TaxRateRupiahPerDollar = Math.Round(decimal.Parse(taxRateRupiah), 2, MidpointRounding.AwayFromZero);
            }
            if (!CommonUtil.IsNullOrEmpty(bankRateDollar))
            {
                row.BankRateDollarPerRupiah = Math.Round(decimal.Parse(bankRateDollar), 9, MidpointRounding.AwayFromZero);
            }
            if (!CommonUtil.IsNullOrEmpty(taxRateDollar))
            {
                row.TaxkRateDollarPerRupiah = Math.Round(decimal.Parse(taxRateDollar), 9, MidpointRounding.AwayFromZero);
            }

            row.CreateBy   = CommonUtil.dsTransData.dtUserData.EmpNo;
            row.CreateDate = CommonUtil.dsTransData.dtOperationData.ProcessDateTime;
            row.UpdateBy   = CommonUtil.dsTransData.dtUserData.EmpNo;
            row.UpdateDate = CommonUtil.dsTransData.dtOperationData.ProcessDateTime;

            return(row);
        }
        public tbt_RateConversion RegisterRate(NameValueCollection param)
        {
            DateTime targetDate = DateTime.ParseExact(param["targetDate"], "d/MMM/yyyy", null);

            var registered         = db.tbt_RateConversion.Where(e => e.TargetDate == targetDate);
            tbt_RateConversion row = null;

            if (registered.Count() > 0)
            {
                row = UpdateRow(
                    registered.First(),
                    param["bankRateRupiah"],
                    param["taxRateRupiah"],
                    param["bankRateDollar"],
                    param["taxRateDollar"]
                    );
            }
            else
            {
                row = CreateNewRow(
                    param["targetDate"],
                    param["bankRateRupiah"],
                    param["taxRateRupiah"],
                    param["bankRateDollar"],
                    param["taxRateDollar"]
                    );
                db.tbt_RateConversion.Add(row);
            }

            db.SaveChanges();
            return(row);
        }
        /// <summary>
        /// Get current exchange tax rate row.
        /// </summary>
        /// <param name="baseDate"></param>
        /// <param name="getJustBefore"></param>
        /// <returns></returns>
        public tbt_RateConversion GetExchangeTaxRate(DateTime baseDate, ref double errorCode)
        {
            tbt_RateConversion rate = GetRateOnTargetDate(baseDate, ref errorCode);

            if (CommonUtil.IsNullOrEmpty(rate))
            {
                errorCode = RateCalcCode.C_ERROR_NO_RATE;
                rate      = GetJustBeforeTaxRateByTargetDate(baseDate, ref errorCode);
            }
            return(rate);
        }
        /// <summary>
        /// return converted Amount by bank rate
        /// </summary>
        /// <param name="baseDate"></param>
        /// <param name="convertType"></param>
        /// <param name="amount"></param>
        /// <param name="errorCode"></param>
        /// <returns></returns>
        public decimal ConvertAmountByBankRate(DateTime baseDate, string convertType, decimal amount, ref double errorCode)
        {
            errorCode = RateCalcCode.C_NO_ERROR;
            decimal convertedAmount = 0;

            tbt_RateConversion rateRow = GetExchangeBankRate(baseDate, ref errorCode);

            if (errorCode != RateCalcCode.C_NO_ERROR && errorCode != RateCalcCode.C_ERROR_NO_RATE)
            {
                return(0);
            }

            if (convertType == RateCalcCode.C_CONVERT_TYPE_TO_DOLLAR && !CommonUtil.IsNullOrEmpty(rateRow.BankRateDollarPerRupiah))
            {// IRP to USD
                convertedAmount = amount * (decimal)rateRow.BankRateDollarPerRupiah;
            }
            else if (convertType == RateCalcCode.C_CONVERT_TYPE_TO_RPIAH && !CommonUtil.IsNullOrEmpty(rateRow.BankRateRupiahPerDollar))
            {// USD to IRP
                convertedAmount = amount * (decimal)rateRow.BankRateRupiahPerDollar;
            }
            else
            {
                errorCode = RateCalcCode.C_ERROR_OTHER;
            }

            if (errorCode != RateCalcCode.C_NO_ERROR && errorCode != RateCalcCode.C_ERROR_NO_RATE)
            {
                return(0);
            }

            CheckConcertedAmount(convertedAmount, ref errorCode);
            if (errorCode != RateCalcCode.C_NO_ERROR && errorCode != RateCalcCode.C_ERROR_NO_RATE)
            {
                return(0);
            }

            RoundConvertedAmount(ref convertedAmount, convertType, ref errorCode);
            if (errorCode != RateCalcCode.C_NO_ERROR && errorCode != RateCalcCode.C_ERROR_NO_RATE)
            {
                return(0);
            }

            return(convertedAmount);
        }
        public tbt_RateConversion UpdateRow(tbt_RateConversion registerdRow, string bankRateRupiah, string taxRateRupiah, string bankRateDollar, string taxRateDollar)
        {
            if (!CommonUtil.IsNullOrEmpty(bankRateRupiah))
            {
                registerdRow.BankRateRupiahPerDollar = Math.Round(decimal.Parse(bankRateRupiah), 2, MidpointRounding.AwayFromZero);
            }
            if (!CommonUtil.IsNullOrEmpty(taxRateRupiah))
            {
                registerdRow.TaxRateRupiahPerDollar = Math.Round(decimal.Parse(taxRateRupiah), 2, MidpointRounding.AwayFromZero);
            }
            if (!CommonUtil.IsNullOrEmpty(bankRateDollar))
            {
                registerdRow.BankRateDollarPerRupiah = Math.Round(decimal.Parse(bankRateDollar), 9, MidpointRounding.AwayFromZero);
            }
            if (!CommonUtil.IsNullOrEmpty(taxRateDollar))
            {
                registerdRow.TaxkRateDollarPerRupiah = Math.Round(decimal.Parse(taxRateDollar), 9, MidpointRounding.AwayFromZero);
            }
            registerdRow.UpdateBy   = CommonUtil.dsTransData.dtUserData.EmpNo;
            registerdRow.UpdateDate = CommonUtil.dsTransData.dtOperationData.ProcessDateTime;

            return(registerdRow);
        }