コード例 #1
0
        public DataRow build(DataRow input)
        {
            DataTable resultTable = new DataTable();

            String casenum = Convert.ToString(input["casenum"]);
            String file    = input.Table.TableName;

            int contacts = Convert.ToInt32(input["contacts"]);

            string[] beneficiars            = Convert.ToString(input["beneficiars"]).Split(new char[] { '-' });;
            String   insurer_citizenship    = input.Table.Columns.Contains("insurer_citizenship") ? Convert.ToString(input["insurer_citizenship"]) : null;
            String   insured_citizenship    = input.Table.Columns.Contains("insured_citizenship") ? Convert.ToString(input["insured_citizenship"]) : null;
            String   insurer_birthdate      = input.Table.Columns.Contains("insurer_birthdate") ? Convert.ToString(input["insurer_birthdate"]) : null;
            String   insured_birthdate      = input.Table.Columns.Contains("insured_birthdate") ? Convert.ToString(input["insured_birthdate"]) : null;
            String   insurer_age            = input.Table.Columns.Contains("insurer_age") ? Convert.ToString(input["insurer_age"]) : null;
            String   insured_age            = input.Table.Columns.Contains("insured_age") ? Convert.ToString(input["insured_age"]) : null;
            String   beneficiar_citizenship = input.Table.Columns.Contains("beneficiar_citizenship") ? Convert.ToString(input["beneficiar_citizenship"]) : null;
            String   beneficiar_age         = input.Table.Columns.Contains("beneficiar_age") ? Convert.ToString(input["beneficiar_age"]) : null;

            List <DataColumn> exceptedColumns = input.Table.Columns.OfType <DataColumn>()
                                                .ToList().Where(x => x.ColumnName == "contacts" ||
                                                                x.ColumnName == "beneficiars" ||
                                                                x.ColumnName == "casenum" ||
                                                                x.ColumnName == "insurer_citizenship" ||
                                                                x.ColumnName == "insured_citizenship" ||
                                                                x.ColumnName == "insurer_birthdate" ||
                                                                x.ColumnName == "insured_birthdate" ||
                                                                x.ColumnName == "insurer_age" ||
                                                                x.ColumnName == "insured_age" ||
                                                                x.ColumnName == "prg_id" ||
                                                                x.ColumnName == "comment").ToList();
            List <DataColumn> resultColumns = input.Table.Columns.OfType <DataColumn>().Except(exceptedColumns).ToList();

            resultTable.Columns.AddRange(resultColumns.Select(item => new DataColumn(item.ColumnName)).ToArray());

            DataRow result = resultTable.NewRow();

            //копирование из исходного файла
            for (int i = 0; i < resultColumns.Count; i++)
            {
                result[resultColumns[i].ColumnName] = input[resultColumns[i].ColumnName];
            }

            //добавление контактов
            if (contacts == 0)
            {
                log.Debug(String.Format("Получение контакта страхователя=застрахованный для casenum={2} file={3} - citizenship={0} age={1}"
                                        , insurer_citizenship
                                        , insurer_age
                                        , casenum
                                        , file));
                DataRow contact = buffer.getContact(insurer_citizenship, !string.IsNullOrEmpty(insurer_birthdate) ? insurer_birthdate : insurer_age, input);
                if (contact != null)
                {
                    DataColumn[] columns = contact.Table.Columns.OfType <DataColumn>().ToArray();
                    for (int i = 0; i < contact.ItemArray.Count(); i++)
                    {
                        resultTable.Columns.Add("insurer_" + columns[i].ColumnName);
                        result["insurer_" + columns[i].ColumnName] = contact.ItemArray[i];
                    }
                    resultTable.Columns.Remove("insurer_type");
                }
                else
                {
                    log.Error(String.Format("Ошибка получения контакта для casenum={2} file={3} - citizenship={0} age={1}"
                                            , insurer_citizenship
                                            , insurer_age
                                            , casenum
                                            , file));
                    return(null);
                }
            }
            else if (contacts == 1)
            {
                log.Debug(String.Format("Получение контакта страхователя для casenum={2} file={3} - citizenship={0} age={1}"
                                        , insurer_citizenship
                                        , insurer_age
                                        , casenum
                                        , file));
                DataRow insurer = buffer.getContact(insurer_citizenship, !string.IsNullOrEmpty(insurer_birthdate) ? insurer_birthdate : insurer_age, input);

                log.Debug(String.Format("Получение контакта застрахованного для casenum={2} file={3} - citizenship={0} age={1}"
                                        , insured_citizenship
                                        , insured_age
                                        , casenum
                                        , file));
                DataRow insured = buffer.getContact(insured_citizenship, !string.IsNullOrEmpty(insured_birthdate) ? insured_birthdate : insured_age, input);
                if (insurer != null && insured != null)
                {
                    DataColumn[] columns = insurer.Table.Columns.OfType <DataColumn>().ToArray();
                    for (int i = 0; i < insurer.ItemArray.Count(); i++)
                    {
                        resultTable.Columns.Add("insurer_" + columns[i].ColumnName);
                        result["insurer_" + columns[i].ColumnName] = insurer.ItemArray[i];
                    }
                    resultTable.Columns.Remove("insurer_type");
                    for (int i = 0; i < insured.ItemArray.Count(); i++)
                    {
                        resultTable.Columns.Add("insured_" + columns[i].ColumnName);
                        result["insured_" + columns[i].ColumnName] = insured.ItemArray[i];
                    }
                    resultTable.Columns.Remove("insured_type");
                }
                else
                {
                    log.Error(String.Format("Ошибка получения контактов для casenum={2} file={3} - insurer_citizenship={0} insurer_age={1}, insured_citizenship={4} insured_age={5}"
                                            , insurer_citizenship
                                            , insurer_age
                                            , casenum
                                            , file
                                            , insured_citizenship
                                            , insured_age));
                    return(null);
                }
            }
            else
            {
                log.Error(String.Format("Неверное значение contacts для casenum={0} file{1}"
                                        , casenum
                                        , file));
                return(null);
            }

            //добавление выгодопреобретателей
            if (beneficiars.Length == 1)
            {
                int beneficiarsValue = new int();
                if (int.TryParse(beneficiars[0], out beneficiarsValue))
                {
                    if (beneficiarsValue == 0)
                    {
                        resultTable.Columns.Add("beneficiary_is_inheritor");
                        result["beneficiary_is_inheritor"] = "Y";
                    }
                    else if (beneficiarsValue > 0)
                    {
                        resultTable.Columns.Add("beneficiary_is_inheritor");
                        result["beneficiary_is_inheritor"] = "N";
                        int[] part = getPartOfInsSum(beneficiarsValue);
                        for (int i = 0; i < beneficiarsValue; i++)
                        {
                            log.Debug(String.Format("Получение выгодопреобретателя для file={2} casenum={3} - citizenship={0} age={1}"
                                                    , beneficiar_citizenship
                                                    , beneficiar_age
                                                    , casenum
                                                    , file));
                            DataRow      beneficiar = buffer.getBeneficiar(beneficiar_citizenship, beneficiar_age, input);
                            DataColumn[] columns    = beneficiar.Table.Columns.OfType <DataColumn>().ToArray();
                            for (int j = 0; j < beneficiar.ItemArray.Count(); j++)
                            {
                                resultTable.Columns.Add(countPrefixes[i] + columns[j].ColumnName);
                                result[countPrefixes[i] + columns[j].ColumnName] = beneficiar.ItemArray[j];
                            }
                            resultTable.Columns.Add(countPrefixes[i] + "beneficiary_part_of_ins_sum");
                            result[countPrefixes[i] + "beneficiary_part_of_ins_sum"] = part[i];
                        }
                    }
                    resultTable.Columns.Add("beneficiaries_counter");
                    result["beneficiaries_counter"] = beneficiarsValue;
                }
                else
                {
                    log.Error(String.Format("Неверное значение beneficiar для casenum={0} file={1}"
                                            , casenum
                                            , file));
                    return(null);
                }
            }
            else if (beneficiars.Length == 2)
            {
                /*реализовать позже*/
            }
            else
            {
                log.Error(String.Format("Неверное значение beneficiar для casenum={0} file={1}"
                                        , casenum
                                        , file));
                return(null);
            }
            return(result);
        }