Esempio n. 1
0
        public IHttpActionResult GetData([FromBody] FindTranDataModel req)
        {
            HeaderRep headerRep = db.HeaderReps.Find(req.ReportId);

            if (headerRep == null)
            {
                return(Json("Отчет с таким номером отсутствует."));
            }

            GridDataHandler handler = new GridDataHandler(db);
            var             res     = handler.GetData(req, headerRep);

            if (!String.IsNullOrEmpty(handler.ErrorString))
            {
                return(Json(handler.ErrorString));
            }
            return(Json(res));
        }
Esempio n. 2
0
        public void Test_1()
        {
            HeaderRep         hr  = GetHeaderRep();
            FindTranDataModel req = GetTranDataModel(1);

            GridDataHandler handler = new GridDataHandler(db);

            GridDataHandler.ResponseData res = handler.GetData(req, hr, true);
            if (!String.IsNullOrEmpty(handler.ErrorString))
            {
                throw new HttpException(ErrorTitles[0] + handler.ErrorString);
            }

            if (res.data.Length != 0 || res.recordsTotal != 0)
            {
                throw new HttpException(ErrorTitles[0] + "Некорректные выходные данные.");
            }
        }
Esempio n. 3
0
        public void Tests(HeaderRep hr, int num_test, int count_records)
        {
            FindTranDataModel req = GetTranDataModel(num_test);

            GridDataHandler handler = new GridDataHandler(db);

            GridDataHandler.ResponseData res = handler.GetData(req, hr, true);
            if (!String.IsNullOrEmpty(handler.ErrorString))
            {
                throw new HttpException(ErrorTitles[num_test] + handler.ErrorString);
            }

            int data_length = data_lengths[num_test];

            if (res.data.Length != data_length || res.recordsTotal != count_records || res.recordsFiltered != data_length)
            {
                throw new HttpException(ErrorTitles[num_test] + "Некорректные выходные данные: " +
                                        String.Format("Data length = {0} (!={1}), Total records = {2} (!={3}), Filtered records = {4} (!={5})",
                                                      res.data.Length, data_length, res.recordsTotal, count_records, res.recordsFiltered, data_length));
            }
        }
Esempio n. 4
0
        public ResponseData GetData(FindTranDataModel req, HeaderRep headerRep, bool is_test = false)
        {
            string user_id = CurrentUserId;

            if (!is_test && user_id == null)
            {
                ErrorString = "Не был определен пользователь для входа в систему.";
                return(data_empty);
            }

            try
            {
                // Установка всех фильтров
                var filterAddInfRep = new HandleFilterParams <AddInfRep>();
                var filterBasicRep  = new HandleFilterParams <BasicRep>();
                var filterClientRep = new HandleFilterParams <ClientRep>();
                var filterIssuerRep = new HandleFilterParams <IssuerRep>();
                var filterNoticeRep = new HandleFilterParams <NoticeRep>();
                var filterAddRep    = new HandleFilterParams <AddRep>();
                var filterRep406    = new HandleFilterParams <Rep406>();
                var filterSupdocRep = new HandleFilterParams <SupdocRep>();

                bool is_rep_406 = false;
                bool is_cr      = false;
                bool is_ir      = false;
                bool is_nr      = false;
                bool is_add_rep = false;
                bool is_sr      = false;

                // Условие фильтра дубликатов и статуса NEW
                //  if (!req.onlyDuple)
                //      filterAddInfRep.AddField(CreateParam("AddInfRep_Status", "string", "not_equal", NEW_STR));

                filterAddInfRep.AddField(CreateParam("AddInfRep_Status", "string",
                                                     req.onlyDuple ? "equal" : "not_equal", DUPLICATE_STR));

                // Добавить правила
                if (req.Rules != null)
                {
                    foreach (QueryBuildRule qbr in req.Rules)
                    {
                        string table_name = GetClassName(qbr.id);

                        if (table_name == "AddInfRep")
                        {
                            filterAddInfRep.AddField(qbr);
                        }
                        else
                        if (table_name == "BasicRep")
                        {
                            filterBasicRep.AddField(qbr);
                        }
                        else
                        if (table_name == "ClientRep")
                        {
                            filterClientRep.AddField(qbr);
                            is_cr = true;
                        }
                        else
                        if (table_name == "IssuerRep")
                        {
                            filterIssuerRep.AddField(qbr);
                            is_ir = true;
                        }
                        else
                        if (table_name == "NoticeRep")
                        {
                            filterNoticeRep.AddField(qbr);
                            is_nr = true;
                        }
                        else
                        if (table_name == "AddRep")
                        {
                            filterAddRep.AddField(qbr);
                            is_add_rep = true;
                        }
                        else
                        if (table_name == "Rep406")
                        {
                            filterRep406.AddField(qbr);
                            is_rep_406 = true;
                        }
                        else
                        if (table_name == "SupdocRep")
                        {
                            filterSupdocRep.AddField(qbr);
                            is_sr = true;
                        }
                        else
                        {
                            throw new ApplicationException("Несуществующее имя таблицы: " + table_name);
                        }
                    }
                }


                // Получить все выражения
                bool all           = false;
                var  check_filials = filterBasicRep.GetExpression(GetFilterFilials(user_id, out all), "Filial", all);
                var  check_clients = filterClientRep.GetExpression(GetFilterClients(user_id, out all), "TypeRez", all);
                var  check_supdocs = filterAddInfRep.GetExpression(GetFilterSupdocs(user_id, out all), "SupdocFl", all);

                var check_addinf_rep = filterAddInfRep.GetExpression();
                var check_basic_rep  = filterBasicRep.GetExpression();
                var check_client_rep = filterClientRep.GetExpression();
                var check_issuer_rep = filterIssuerRep.GetExpression();
                var check_notice_rep = filterNoticeRep.GetExpression();
                var check_add_rep    = filterAddRep.GetExpression();
                var check_rep_406    = filterRep406.GetExpression();
                var check_supdoc_rep = filterSupdocRep.GetExpression();

                int total_records = db.AddInfReps.Where(x => x.IdRep == headerRep.Id).Select(x => x.IdOper).Count();

                // Запрос операций, удовлетворяющих всем условиям всех фильтров.
                var Operations = from ar in db.AddInfReps.AsExpandable()
                                 join br in db.BasicReps.AsExpandable() on ar.IdOper equals br.IdOper
                                 join cr_left in db.ClientReps.AsExpandable() on ar.IdOper equals cr_left.IdOper into cr_1
                                 join ir_left in db.IssuerReps.AsExpandable() on ar.IdOper equals ir_left.IdOper into ir_1
                                 join nr_left in db.NoticeReps.AsExpandable() on ar.IdOper equals nr_left.IdOper into nr_1
                                 join r406_left in db.Rep406s.AsExpandable() on ar.IdOper equals r406_left.IdOper into r406_1
                                 join sr_left in db.SupdocReps.AsExpandable() on ar.IdOper equals sr_left.IdOper into sr_1
                                 join add_rep_left in db.AddReps.AsExpandable() on ar.IdOper equals add_rep_left.IdOper into add_rep_1
                                 from cr in cr_1.DefaultIfEmpty()
                                 from nr in nr_1.DefaultIfEmpty()
                                 from ir in ir_1.DefaultIfEmpty()
                                 from r406 in r406_1.DefaultIfEmpty()
                                 from sr in sr_1.DefaultIfEmpty()
                                 from add_rep in add_rep_1.DefaultIfEmpty()
                                 where headerRep.Id == ar.IdRep && (!is_rep_406 || (is_rep_406 && ar.Form == "406")) &&
                                 (!is_cr || (is_cr && cr != null)) && (!is_ir || (is_ir && ir != null)) &&
                                 (!is_nr || (is_nr && nr != null)) && (!is_add_rep || (is_add_rep && add_rep != null)) &&
                                 (!is_sr || (is_sr && sr != null)) &&
                                 check_filials.Invoke(br) && (cr == null || check_clients.Invoke(cr)) &&
                                 check_supdocs.Invoke(ar) && check_addinf_rep.Invoke(ar) &&
                                 check_basic_rep.Invoke(br) && (cr == null || check_client_rep.Invoke(cr)) &&
                                 (ir == null || check_issuer_rep.Invoke(ir)) && (nr == null || check_notice_rep.Invoke(nr)) &&
                                 (add_rep == null || check_add_rep.Invoke(add_rep)) && (r406 == null || check_rep_406.Invoke(r406)) &&
                                 (sr == null || check_supdoc_rep.Invoke(sr))
                                 orderby br.Filial, br.PostDate
                    select new GridData
                {
                    // AddInfRep
                    Form        = ar.Form,
                    Section     = ar.Section,
                    Status      = ar.Status,
                    SupdocFl    = ar.SupdocFl,
                    DateLock    = ar.DateLock,
                    DateRemove  = ar.DateRemove,
                    NumJD       = ar.NumJD,
                    NumDVK      = ar.NumDVK,
                    DateRequest = ar.DateRequest,
                    DateGetDoc  = ar.DateGetDoc,
                    CNum        = ar.CNum,
                    CBAccount   = ar.CBAccount,

                    // BasicRep
                    Filial       = br.Filial,
                    PostDate     = br.PostDate,
                    TypeTooling  = br.TypeTooling,
                    OperType     = br.OperType,
                    DirectionPay = br.DirectionPay,
                    Count        = br.Count,
                    Share        = br.Share,
                    Ccy          = br.Ccy,
                    AmountAll    = br.AmountAll,
                    AmntIncome   = br.AmntIncome,
                    RefNum       = br.RefNum,
                    CodeVO       = br.CodeVO,            // (cr.TypeRez == PERSON ? CODE_VO_PERSON : br.CodeVO),
                    ValueDate    = br.ValueDate,
                    Swift        = br.Swift,
                    SwiftFil     = br.SwiftFil,

                    // ClientRep
                    NameRez        = (cr == null ? string.Empty : cr.NameRez),
                    TypeRez        = (cr == null ? string.Empty : cr.TypeRez),
                    BicPartner     = (cr == null ? string.Empty : cr.BicPartner),
                    CountryRez     = (cr == null ? string.Empty : cr.CountryRez),
                    INN            = (cr == null ? string.Empty : cr.INN),
                    NameNerez      = (cr == null ? string.Empty : cr.NameNerez),
                    TypeNerez      = (cr == null ? string.Empty : cr.TypeNerez),
                    CountryNerez   = (cr == null ? string.Empty : cr.CountryNerez),
                    BankName       = (cr == null ? string.Empty : cr.BankName),
                    CountryBank    = (cr == null ? string.Empty : cr.CountryBank),
                    PartnerName    = (cr == null ? string.Empty : cr.PartnerName),
                    CountryPartner = (cr == null ? string.Empty : cr.CountryPartner),
                    CustNo         = (cr == null ? string.Empty : cr.CustNo),

                    // IssuerRep
                    IssuerName    = (ir == null ? string.Empty : ir.IssuerName),
                    SecurityCode  = (ir == null ? string.Empty : ir.SecurityCode),
                    RegNumIssuer  = (ir == null ? string.Empty : ir.RegNumIssuer),
                    DateRegIssuer = (ir == null ? null : ir.DateRegIssuer),
                    RepayDate     = (ir == null ? null : ir.RepayDate),
                    CcyIssuer     = (ir == null ? string.Empty : ir.CcyIssuer),
                    IssuerCode    = (ir == null ? null : ir.IssuerCode),
                    IssuerReestr  = (ir == null ? string.Empty : ir.IssuerReestr),

                    // VK_406_REP
                    OperKind       = (r406 == null ? null : r406.OperKind),
                    Notice40       = (r406 == null ? string.Empty : r406.Notice40),
                    AmountTo       = (r406 == null ? null : r406.AmountTo),
                    AmountFrom     = (r406 == null ? null : r406.AmountFrom),
                    BicBank        = (r406 == null ? string.Empty : r406.BicBank),
                    CountryBank406 = (r406 == null ? string.Empty : r406.CountryBank406),
                    AddCode10      = (r406 == null ? string.Empty : r406.AddCode10),
                    KindRez        = (r406 == null ? string.Empty : r406.KindRez),
                    KindNerez      = (r406 == null ? string.Empty : r406.KindNerez),
                    KindContract   = (r406 == null ? string.Empty : r406.KindContract),
                    TypeContract   = (r406 == null ? string.Empty : r406.TypeContract),
                    Notice15       = (r406 == null ? string.Empty : r406.Notice15),
                    Notice16       = (r406 == null ? string.Empty : r406.Notice16),
                    NoticeOther    = (r406 == null ? string.Empty : r406.NoticeOther),

                    // VK_SUPDOC_REP
                    CodeSupdoc   = (sr == null ? string.Empty : sr.CodeSupdoc),
                    SupdocName   = (sr == null ? string.Empty : sr.SupdocName),
                    Prinvest     = (sr == null ? null : sr.Prinvest),
                    EntryDate    = (sr == null ? null : sr.EntryDate),
                    SupdocType   = (sr == null ? string.Empty : sr.SupdocType),
                    RegNumBranch = (sr == null ? string.Empty : sr.RegNumBranch),
                    ClientName   = (sr == null ? string.Empty : sr.ClientName),
                    SourceSupdoc = (sr == null ? string.Empty : sr.SourceSupdoc),
                    PassportNum  = (sr == null ? string.Empty : sr.PassportNum),
                    DocDate      = (sr == null ? null : sr.DocDate),
                    UpdateSdDate = (sr == null ? null : sr.UpdateSdDate),

                    OperationId = ar.IdOper
                };

                int        count_rows     = Operations.Count();
                GridData[] arr_operations = new GridData[] { };

                if (count_rows != 0)
                {
                    CorrectProperties.Correction <GridData>(Operations);

                    // Добавить правила сортировки полей
                    StringBuilder sb = new StringBuilder();
                    if (req.OrderRules != null)
                    {
                        foreach (FindTranOrder fto in req.OrderRules)
                        {
                            sb.AppendFormat("{0} {1},", GridData.GetFieldName(fto.column), fto.dir);
                        }
                    }

                    string order_by = sb.ToString().TrimEnd(',');


                    if (req.StartRowNo >= count_rows)
                    {
                        ErrorString = "Некорректный номер строки для выбора из списка операций.";
                        return(data_empty);
                    }

                    int page_length = ((req.StartRowNo + req.PageLength) <= count_rows) ? req.PageLength : (count_rows - req.StartRowNo);

                    // Получение сортированного списка
                    if (!String.IsNullOrEmpty(order_by))
                    {
                        Operations = Operations.OrderBy(order_by);
                    }

                    arr_operations = Operations.Skip(req.StartRowNo).Take(page_length).ToArray();
                }

                return(new ResponseData
                {
                    recordsTotal = total_records,       // количество всех записей отчета
                    recordsFiltered = count_rows,       // количество отфильтрованных записей
                    data = GetDataArray(arr_operations) // массив со значениями строк
                });
            }
            catch (Exception ex)
            {
                ErrorString = "Некорректное условие в фильтре: " + ex.Message;
                return(data_empty);
            }
        }