Ejemplo n.º 1
0
        private List <CashflowVariablesData> CheckAndConvertOverridableVariableList(DatasetLogicModel dataset, string varList)
        {
            var overridableVariables = new List <CashflowVariablesData>();
            var dictNameDescription  = new Dictionary <string, string>();

            foreach (var record in dataset.Variables.FutureVariables)
            {
                dictNameDescription[record.Name] = record.Description;
            }
            Func <string, string> getDescription = x => dictNameDescription.ContainsKey(x) ? dictNameDescription[x] : null;

            var overridableVariablesStu = CommUtils.FromJson <CashflowVariableStu[]>(varList).ToList();

            foreach (var overridableVariable in overridableVariablesStu)
            {
                double value  = 0.0;
                var    cnName = Translate(overridableVariable.Name, getDescription(overridableVariable.Name));
                CommUtils.Assert(double.TryParse(overridableVariable.Value, out value) && value >= 0, "[{0}]必须是非负合法数字", cnName);

                overridableVariables.Add(new CashflowVariablesData
                {
                    EnName = overridableVariable.Name,
                    CnName = cnName,
                    Value  = value
                });
            }
            return(overridableVariables);
        }
Ejemplo n.º 2
0
        public DealLogicModel(DatasetLogicModel dataset, string ymlPath, string datasetPath)
            : base(dataset.ProjectLogicModel)
        {
            m_datasetLogicModel = dataset;

            if (!ymlPath.EndsWith("script.yml", StringComparison.CurrentCultureIgnoreCase))
            {
                ymlPath = Path.Combine(ymlPath, "script.yml");
            }

            m_ymlPath     = ymlPath;
            m_datasetPath = datasetPath;
            m_asOfDate    = datasetPath.EndsWith("\\") || datasetPath.EndsWith("/")
                ? Path.GetFileName(Path.GetDirectoryName(datasetPath)) : Path.GetFileName(datasetPath);

            CommUtils.Assert(DateUtils.IsDigitDate(m_asOfDate), "解析AsOfDate失败:datasetPath={0}", datasetPath);
        }
Ejemplo n.º 3
0
        public static void CheckAmortizationSchedule(DatasetLogicModel dataset, string asOfDate)
        {
            CommUtils.Assert(dataset != null && dataset.Instance != null, "查找模型失败asOfDate={0}", asOfDate);

            foreach (var asset in dataset.Assets)
            {
                if (asset.AmortizationType == AmortizationType.UserDefined)
                {
                    var amortizationList = asset.Amortization.AmortizationRecords;
                    if (amortizationList.Count > 0)
                    {
                        CommUtils.Assert(amortizationList.Any(x => x.Date >= asset.SecurityData.AsOfDate),
                                         "在AmortizationSchedule.csv中,找不到资产[{0}({1})]在asofDate={2}之后的偿付数据。",
                                         asset.SecurityData.SecurityName, asset.AssetId, asset.SecurityData.AsOfDate.ToString("yyyy-MM-dd"));
                    }
                }
            }
        }
Ejemplo n.º 4
0
        /// <summary>
        /// 更新数据库中的参数到模型文件中
        /// </summary>
        private void UpdateVariablesFromTaskDBToModel(DatasetLogicModel dataset, CashflowViewModel dbViewModel)
        {
            if (dbViewModel == null || dataset.Instance == null)
            {
                return;
            }

            var dbVarList = dbViewModel.OverridableVariables;

            //更新FutureVariables.csv
            foreach (var keyVal in dbVarList)
            {
                dataset.Variables.UpdateVariableValue(keyVal.EnName, dataset.DatasetSchedule.PaymentDate, keyVal.Value.ToString());
            }

            //更新CurrentVariables.csv
            //设置 OtherIncome = 当期的OtherIncomeMax + 前一期模型的OtherIncome
            var otherIncomeMaxKeyVal = dbVarList.SingleOrDefault(x => x.EnName.Equals("OtherIncomeMax", StringComparison.CurrentCultureIgnoreCase));

            if (otherIncomeMaxKeyVal != null)
            {
                var key = "OtherIncome";
                var otherIncomeValue = otherIncomeMaxKeyVal.Value;

                if (dataset.Previous != null && dataset.Previous.Instance != null)
                {
                    string prevOtherIncomeVal = dataset.Previous.Variables.GetVariable(key);
                    double prevOtherIncome    = 0;
                    if (double.TryParse(prevOtherIncomeVal, out prevOtherIncome))
                    {
                        otherIncomeValue += prevOtherIncome;
                    }
                }

                dataset.Variables.UpdateVariableValue(key, dataset.Variables.Asofdate, "其他收益");

                dataset.Variables.Save();
            }
        }
Ejemplo n.º 5
0
        /// <summary>
        /// 从文件中选取可修改变量
        /// </summary>
        private List <CashflowVariablesData> SelectOverridableVariables(DatasetLogicModel dataset)
        {
            var varList = new List <CashflowVariablesData>();
            var records = dataset.Variables.FutureVariables.Where(x => m_overridableVariableNames.Contains(x.Name));

            foreach (var record in records)
            {
                double value;
                if (!double.TryParse(record.Items[dataset.DatasetSchedule.PaymentDate], out value))
                {
                    value = 0;
                }

                varList.Add(new CashflowVariablesData
                {
                    EnName = record.Name,
                    CnName = Translate(record.Name, record.Description),
                    Value  = value,
                });
            }
            return(varList);
        }
Ejemplo n.º 6
0
        private void UpdateVariablesFromCurrPeriodDBToModel(DatasetLogicModel dataset,
                                                            List <CashflowVariable> variableDateset, int projectId, DateTime paymentDate)
        {
            if (dataset == null)
            {
                return;
            }

            if (variableDateset.Count == 0)
            {
                var tasks = m_dbAdapter.Task.GetTasksByProjectId(projectId, true);
                tasks = tasks.Where(x =>
                                    x.TaskExtensionId.HasValue && x.TaskExtension.TaskExtensionType == TaskExtensionType.Cashflow.ToString()
                                    ).ToList();

                if (tasks.Count > 0)
                {
                    var projectLogicModel = dataset.ProjectLogicModel;
                    var allPaymentDays    = projectLogicModel.GetAllPaymentDates(projectLogicModel.DealSchedule.Instanse.PaymentDates);

                    var currPaymentDateIndex = allPaymentDays.IndexOf(paymentDate);
                    if (currPaymentDateIndex != -1)
                    {
                        if (currPaymentDateIndex == 0)
                        {
                            tasks = tasks.Where(x => x.EndTime <= paymentDate).ToList();
                        }
                        else
                        {
                            tasks = tasks.Where(x => x.EndTime > allPaymentDays[currPaymentDateIndex + 1] && x.EndTime <= paymentDate).ToList();
                        }

                        if (tasks.Count > 0)
                        {
                            var task        = tasks.First();
                            var dbViewModel = Toolkit.ConvertTaskExtension(task.TaskExtension).Info as CashflowViewModel;
                            if (dbViewModel != null)
                            {
                                var cashflowVariable = SaveOverridableVariable(dbViewModel.OverridableVariables, projectId, paymentDate);

                                UpdateVariablesFromCurrPeriodDBToModel(dataset, cashflowVariable, projectId, paymentDate);
                            }
                        }
                    }
                }
            }

            //更新FutureVariables.csv
            foreach (var keyVal in variableDateset)
            {
                dataset.Variables.UpdateVariableValue(keyVal.EnglishName, dataset.DatasetSchedule.PaymentDate, keyVal.Value.ToString());
            }

            //更新CurrentVariables.csv
            //设置 OtherIncome = 当期的OtherIncomeMax + 前一期模型的OtherIncome
            var otherIncomeMaxKeyVal = variableDateset.SingleOrDefault(x => x.EnglishName.Equals("OtherIncomeMax", StringComparison.CurrentCultureIgnoreCase));

            if (otherIncomeMaxKeyVal != null)
            {
                var key = "OtherIncome";
                var otherIncomeValue = otherIncomeMaxKeyVal.Value;

                if (dataset.Previous != null && dataset.Previous.Instance != null)
                {
                    //当前一期Dataset存在时,如果前一期的CurrentVariablesCsv不存在,不处理前一期表中的OtherIncome
                    if (dataset.Previous.Variables.CurrentVariables.Count > 0)
                    {
                        //var prevColumnDate = dataset.Previous.Variables..DateColumns.First();
                        foreach (var record in dataset.Previous.Variables.CurrentVariables)
                        {
                            if (record.Key.Equals(key, StringComparison.OrdinalIgnoreCase))
                            {
                                double prevOtherIncome = 0;
                                if (double.TryParse(record.Value, out prevOtherIncome))
                                {
                                    otherIncomeValue += prevOtherIncome;
                                    break;
                                }
                            }
                        }
                    }
                }

                var currentCsv = dataset.Variables.CurrentVariables;

                CommUtils.Assert(currentCsv.Count > 0,
                                 $"第{DateUtils.DateToString(paymentDate)}期模型中,currentCSV不包含任何偿付期列");
                var date = dataset.Variables.Asofdate;

                dataset.Variables.UpdateVariableValue(key, date, otherIncomeValue.ToString(), "其它收益");
                dataset.Variables.Save();
            }
        }