Exemple #1
0
        protected override async Task <t_dohod> ChechRecord(t_dohod dohod, ImportParam importParam)
        {
            if (dohod == null)
            {
                return(null);
            }

            var record = await GetExistingRecord(dohod);

            if (record != null)
            {
                //
                if (record.VidDoc == VidDoc.BD)
                {
                    // Пропускаем BD
                    _previewdata.recsSkip++;
                    return(null);
                }
                else
                {
                    // Запись из XL, VT, NP, SF -Обновляем
                    _previewdata.recsUpd++;
                    dohod.Sysid        = record.Sysid;
                    dohod.Orig.Sysid   = record.Orig.Sysid;
                    dohod.Orig.DohodId = record.Sysid;
                    return(dohod);
                }
            }

            _previewdata.recsAdd++;
            return(dohod);
        }
Exemple #2
0
        protected virtual async Task <t_dohod> ChechRecord(t_dohod dohod, ImportParam importParam)
        {
            if (dohod == null)
            {
                return(null);
            }

            // Стандартно: добавить или обновить, ничего не пропуская
            var record = await GetExistingRecord(dohod);

            if (record != null)
            {
                //  var yy =  _dohodDbContext.Entry(dohod);
                //  var xx =  _dohodDbContext.Entry(record);
                //  _dohodDbContext.Entry(record).State = EntityState.Detached;
                //
                _previewdata.recsUpd++;
                dohod.Sysid        = record.Sysid;
                dohod.Orig.Sysid   = record.Orig.Sysid;
                dohod.Orig.DohodId = record.Sysid;
                //yy.State = EntityState.Modified;
            }
            else
            {
                _previewdata.recsAdd++;
            }
            //importParam.recsSkip = 0;
            return(dohod);
        }
Exemple #3
0
        protected override async Task <t_dohod> GetExistingRecord(t_dohod dohod)
        {
            //Cо справкой не пересекается используем гуид
            var query = await _dohodDbContext.t_dohod.AsNoTracking()
                        .Where(w => w.DateOper == dohod.DateOper &&
                               w.VidDoc == VidDoc.VT &&
                               w.Guid == dohod.Guid &&
                               w.DatePp == dohod.DatePp &&
                               w.KbkId == dohod.KbkId &&
                               w.NumPp == dohod.NumPp &&
                               w.SumItg == dohod.SumItg)
                        .Include(x => x.Orig)
                        .ToListAsync();

            if (query.Count == 0)
            {
                //Ищем еще сред NP - но другие параметры GUID нет в NP
                query = await _dohodDbContext.t_dohod.AsNoTracking()
                        .Where(w => w.DateOper == dohod.DateOper &&
                               w.DatePp == dohod.DatePp &&
                               w.VidDoc == VidDoc.NP &&
                               w.KbkId == dohod.KbkId &&
                               w.NumPp == dohod.NumPp &&
                               w.SumItg == dohod.SumItg)
                        .Include(x => x.Orig)
                        .ToListAsync();
            }
            return(query.FirstOrDefault());
        }
Exemple #4
0
        protected override async Task <t_dohod> ChechRecord(t_dohod dohod, ImportParam importParam)
        {
            if (dohod == null)
            {
                return(null);
            }

            var record = await GetExistingRecord(dohod);

            if (record != null)
            {
                // здесь только записи NP, VT, SF
                if (record.VidDoc == VidDoc.NP)
                {
                    // Записи из NP не заменяем данными SF
                    _previewdata.recsSkip++;
                    return(null);
                }
                else
                {
                    _previewdata.recsUpd++;
                    dohod.Sysid        = record.Sysid;
                    dohod.Orig.Sysid   = record.Orig.Sysid;
                    dohod.Orig.DohodId = record.Sysid;
                    return(dohod);
                }
            }

            _previewdata.recsAdd++;
            return(dohod);
        }
Exemple #5
0
        protected override async Task <t_dohod> ChechRecord(t_dohod dohod, ImportParam importParam)
        {
            if (dohod == null)
            {
                return(null);
            }

            var record = await GetExistingRecord(dohod);

            if (record != null)
            {
                // VT или NP
                if (record.VidDoc == VidDoc.NP)
                {
                    // Записи из NP не заменяем данными VT, Переиндетификацию уведомлений непроизводим
                    _previewdata.recsSkip++;
                    return(null);
                }
                if (record.VidDoc == VidDoc.VT)
                {
                    _previewdata.recsUpd++;
                    dohod.Sysid        = record.Sysid;
                    dohod.Orig.Sysid   = record.Orig.Sysid;
                    dohod.Orig.DohodId = record.Sysid;
                    return(dohod);
                }
            }

            _previewdata.recsAdd++;
            return(dohod);
        }
Exemple #6
0
 private static void SetEmptyBudgetSums(this t_dohod dohod)
 {
     dohod.SumFed  = 0.0M;
     dohod.SumObl  = 0.0M;
     dohod.SumMest = 0.0M;
     dohod.SumPgt  = 0.0M;
     dohod.SumPst  = 0.0M;
     dohod.SumFond = 0.0M;
     dohod.SumSmol = 0.0M;
 }
Exemple #7
0
        public static async Task <t_uvdet> IdentUved(this DohodDbContext dbContext, t_dohod dohod, ImportParam importParam, bool isUvDocMarking = true)
        {
            // пытаемся определить плательщика, через уведомление
            var uvdets = await dbContext.t_uvdet.AsNoTracking()
                         .Where(w => w.Uv.DateUv == dohod.DatePp &&
                                w.Uv.NomUv == dohod.NumPp &&
                                w.Kbk == dohod.Orig.Kbk &&
                                Math.Abs(w.Summa) == Math.Abs(dohod.SumItg))
                         .ToListAsync();

            // Как быстрее ??
            //var query = await _dohodDbContext.t_uvdet.Where(w=>w.Kbk == dohod.Orig.Kbk && w.Summa == dohod.SumItg)
            //            .Join(_dohodDbContext.t_uv.Where(w=>w.DateUv == dohod.DatePp && w.NomUv == dohod.NumPp), x=>x.UvId, y=>y.Sysid, (x,y)=>x.UvId)
            //            .ToListAsync();

            if (uvdets.Count == 1)
            {
                var uvdet0 = uvdets[0]; // Это может быть как NevPost так и !NevPost
                                        // плательщика берем из уведомления и для VT и для SF, но там его id пока нет
                var uvdetnp = await dbContext.t_uvdet.AsNoTracking()
                              .Where(w => w.Uv.Sysid == uvdet0.UvId && (w.IsNp ?? false))
                              .FirstOrDefaultAsync();

                if (uvdetnp != null && dohod.Sysid != 0)
                {
                    var org = await dbContext.IdentPlat(uvdetnp.PlatInn, uvdetnp.PlatKpp, uvdetnp.PlatName, "");

                    if (org != null)
                    {
                        // ---Запись в t_dohod -----
                        dohod.PlatId        = org.Sysid;
                        dohod.Orig.Inn      = org.Inn;
                        dohod.Orig.Kpp      = org.Kpp;
                        dohod.Orig.PlatName = org.Name;
                        dohod.LinkNp        = uvdetnp.UvId;
                    }
                }
                if (isUvDocMarking)
                {
                    // ---Запись в t_uvdet -----
                    uvdet0.DateVyp = dohod.Date;
                    dbContext.t_uvdet.Update(uvdet0);
                }
                await dbContext.SaveChangesAsync();

                return(uvdet0);
            }
            return(null);
        }
Exemple #8
0
        // ChechRecord - base

        protected override async Task <t_dohod> GetExistingRecord(t_dohod dohod)
        {
            // с другими типами не пересекается
            var query = await _dohodDbContext.t_dohod.AsNoTracking()
                        .Where(w => w.DateOper == dohod.DateOper &&
                               w.Guid == dohod.Guid &&
                               w.VidDoc == VidDoc.ZF &&
                               w.PlatId == dohod.PlatId &&
                               w.KbkId == dohod.KbkId &&
                               w.NumPp == dohod.NumPp &&
                               w.SumItg == dohod.SumItg)
                        .Include(x => x.Orig)
                        .ToListAsync();

            return(query.FirstOrDefault());
        }
Exemple #9
0
        protected override async Task <t_dohod> GetExistingRecord(t_dohod dohod)
        {
            // Для "BD"
            // Ищем только записи для замены среди записей XL, NP типов
            // Если несколко записей с совпадающими параметрами берем первую, далее
            // их число будет уменьшаться, т.к. изменяем VidDoc на BD
            var query = await _dohodDbContext.t_dohod.AsNoTracking()
                        .Where(w => w.DateOper == dohod.DateOper &&
                               w.VidDoc == VidDoc.NP &&
                               w.PlatId == dohod.PlatId &&
                               w.KbkId == dohod.KbkId &&
                               w.NumPp == dohod.NumPp &&
                               w.SumItg == dohod.SumItg)
                        .Include(x => x.Orig)
                        .ToListAsync();

            if (query.Count == 0)
            {
                query = await _dohodDbContext.t_dohod.AsNoTracking()
                        .Where(w => w.DatePp == dohod.DatePp &&
                               w.VidDoc == VidDoc.XL &&
                               w.PlatId == dohod.PlatId &&
                               w.KbkId == dohod.KbkId &&
                               w.OktmoId == dohod.OktmoId &&
                               w.NumPp == dohod.NumPp &&
                               w.SumItg == dohod.SumItg &&
                               (w.IsRaschet ?? false))
                        .Include(x => x.Orig)
                        .ToListAsync();
            }
            if (query.Count == 0)
            {
                // Ищем еще среди BD - могли записать раннее из BD файла с другим наименоанием
                // Используеться GUID
                query = await _dohodDbContext.t_dohod.AsNoTracking()
                        .Where(w => w.DateOper == dohod.DateOper &&
                               w.VidDoc == VidDoc.BD &&
                               w.PlatId == dohod.PlatId &&
                               w.KbkId == dohod.KbkId &&
                               w.NumPp == dohod.NumPp &&
                               w.SumItg == dohod.SumItg &&
                               w.Guid == dohod.Guid)
                        .Include(x => x.Orig)
                        .ToListAsync();
            }
            return(query.FirstOrDefault());
        }
Exemple #10
0
        protected override async Task <t_dohod> GetExistingRecord(t_dohod dohod)
        {
            // Ищем только записи для замены
            // Если несколько записей с совпадающими параметрами, берем первую aTmp[1], далее,
            // их число будет уменьшатся, так как изменяем DOHOD.VIDDOC на VIDDOC_SF
            // Также как VT c SF, хоть номер уведомления и знаем, но использовать можно бы только среди VIDDOC_SF
            var query = await _dohodDbContext.t_dohod.AsNoTracking()
                        .Where(w => w.DateOper == dohod.DateOper &&
                               w.VidDoc == VidDoc.VT &&
                               w.DateZf == dohod.DateZf &&
                               w.NumZf == dohod.NumZf &&
                               w.KbkId == dohod.KbkId &&
                               w.SumItg == dohod.SumItg)
                        .Include(x => x.Orig)
                        .ToListAsync();

            if (query.Count == 0)
            {
                // 1.Ищем еще среди NP(приоритет NP) - 201502012 - еще общее название доукмента, напр.: "Заявка на возврат" в обоих
                query = await _dohodDbContext.t_dohod.AsNoTracking()
                        .Where(w => w.DateOper == dohod.DateOper &&
                               w.VidDoc == VidDoc.NP &&
                               w.DatePp == dohod.DatePp &&
                               w.NumPp == dohod.NumPp &&
                               w.KbkId == dohod.KbkId &&
                               w.SumItg == dohod.SumItg)
                        .Include(x => x.Orig)
                        .ToListAsync();
            }
            if (query.Count == 0)
            {
                // 2.Ищем еще среди SF - могли записать ранее из SF файла с другим наименованием. Используем GUID
                query = await _dohodDbContext.t_dohod.AsNoTracking()
                        .Where(w => w.DateOper == dohod.DateOper &&
                               w.VidDoc == VidDoc.SF &&
                               w.Guid == dohod.Guid &&
                               w.DateZf == dohod.DateZf &&
                               w.NumZf == dohod.NumZf &&
                               w.KbkId == dohod.KbkId &&
                               w.SumItg == dohod.SumItg)
                        .Include(x => x.Orig)
                        .ToListAsync();
            }
            return(query.FirstOrDefault());
        }
Exemple #11
0
        protected override async Task <t_dohod> ChechRecord(t_dohod dohod, ImportParam importParam)
        {
            if (dohod == null)
            {
                return(null);
            }

            var record = await GetExistingRecord(dohod);

            if (record != null)
            {
                _previewdata.recsSkip++;
                return(null);
            }

            _previewdata.recsAdd++;
            return(dohod);
        }
Exemple #12
0
        protected override async Task <t_dohod> GetExistingRecord(t_dohod dohod)
        {
            // Для "XL"
            // Всегда добавляем(кроме записей импортированых из BD, NP которые пропускаем)
            // Здесь возникает проблема если несколько записей с совпадающими параметрами,
            // Возможно_ 1) tally > 1      и / или
            // 2) > 1 записи в файле xl
            // Считаем, что их всех пропускаем, для _tally > 0! Можно бы запоминать, чтобы пропускалась не более 1 раза
            var lst = await _dohodDbContext.t_dohod.AsNoTracking()
                      .Where(w => w.DatePp == dohod.DatePp &&
                             (w.VidDoc == VidDoc.BD || w.VidDoc == VidDoc.NP) &&
                             w.PlatId == dohod.PlatId &&
                             w.KbkId == dohod.KbkId &&
                             w.OktmoId == dohod.OktmoId &&
                             w.NumPp == dohod.NumPp &&
                             w.SumItg == dohod.SumItg &&
                             (w.IsRaschet ?? false))
                      .Include(x => x.Orig)
                      .ToListAsync();

            return(lst.FirstOrDefault());
        }
Exemple #13
0
        private async Task <t_dohod> DohRecord(dynamic objSF, dynamic objSFDOC, dynamic objSFST, ImportParam importParam)
        {
            t_dohod   dohod   = new t_dohod();
            t_dohorig dohorig = new t_dohorig();

            // вспомогательные
            dohorig.OktmoPp = objSFST.OKATO; // (поле 105)*
            var oktmo = GetOktmo(dohorig.OktmoPp.Substr(0, 8), importParam, true);

            if (oktmo == null)
            {
                return(null);
            }


            // dohorig
            dohorig.Oktmo    = oktmo.Oktmo; // objBDPDST.ОКАТО;
            dohorig.Kbk      = objSFST.KBK;
            dohorig.KbkPp    = "";          // (поле 104)*
            dohorig.CodeCeli = "";
            dohorig.Inn      = objSFST.INN_PAY;
            dohorig.Kpp      = objSFST.KPP_PAY;
            dohorig.PlatName = "";
            dohorig.Rs       = "";
            dohorig.Bic      = "";
            dohorig.BankName = "";
            // если нет в справочние, добавлять не нужно
            var org = await _dohodDbContext.IdentPlat(dohorig.Inn, dohorig.Kpp, dohorig.PlatName, dohorig.Rs, false);

            // dohod
            dohod.DateOper    = objSF.DATE;
            dohod.Date        = _dohodDbContext.GetSkipedWorkDay(dohod.DateOper ?? default(DateTime), importParam.DaysToSkip);
            dohod.NumPp       = objSFST.NOM_DOC;
            dohod.DatePp      = objSFST.DATE_DOC;
            dohod.NumZf       = objSFDOC.NOM_SF;
            dohod.DateZf      = objSFDOC.DATE_OTCH;
            dohod.OktmoId     = oktmo.Sysid;
            dohod.KbkId       = (await _dohodDbContext.IdentKbk(dohorig.Kbk)).Sysid;
            dohod.CodeCeliId  = null;
            dohod.PlatId      = org?.Sysid;
            dohod.IsRaschet   = true;
            dohod.IsSumRazb   = false;
            dohod.SumItg      = (decimal)objSFST.SUM_SFST;
            dohod.ImnsInn     = objSFST.INN_ADB;
            dohod.ImnsKpp     = objSFST.KPP_ADB;
            dohod.LsAdb       = "";
            dohod.OsnPlat     = "";               // (поле 106)*
            dohod.CodeVidOper = "";
            dohod.VidOper     = objSFST.NAME_DOC; // "Справка органа ФК"
            dohod.NaznPlat    = objSFST.OPER;     // "Уточнение види и ...."
            dohod.ImportFile  = importParam.FileName;
            dohod.IsNp        = dohorig.Kbk.IsNpCode();
            dohod.IsVoz       = false;
            dohod.IsItg       = false;
            dohod.LinkNp      = null;
            dohod.LinkVoz     = null;
            dohod.LinkItg     = null;
            dohod.Guid        = objSFDOC.GUID_FK;
            dohod.VidDoc      = VidDoc.SF;
            //
            dohod.Orig = dohorig;
            await _dohodDbContext.RazbivkaItogSum(dohod);

            return(dohod);
        }
Exemple #14
0
        private async Task <t_dohod> DohRecord(dynamic objNP, dynamic objNPST, ImportParam importParam)
        {
            t_dohod   dohod    = new t_dohod();
            t_dohorig dohorig  = new t_dohorig();
            var       dateOtch = (DateTime)objNP.DATE_OTCH;
            var       dateEnd  = (DateTime)objNP.DATE_END_PER;

            if (dateOtch != dateEnd)
            {
                dateOtch = objNPST.DATE_DOC_VB;
            }
            if (dateOtch == null)
            {
                return(null); // Пока пропускаем, могли писать бы на какую то дату MIN(MAX(m.dDateBeg, m.o.dDatePP + 2), m.dDateEnd) например
            }
            if (objNPST.TYPE_KBK != "20")
            {
                return(null);
            }

            string oktmopp = objNPST.OKATO;
            // Область обязательно, даже если не прописана в ca_okato(из за акцизов)
            var isOblast = oktmopp.StartsWith("45000000") || oktmopp.StartsWith("46000000");
            var oktmo    = GetOktmo(oktmopp.Substr(0, 8), importParam);

            if (oktmo == null && !isOblast)
            {
                return(null);
            }


            // dohorig
            dohorig.Oktmo    = oktmo?.Oktmo ?? oktmopp.Substr(0, 8); // objBDPDST.ОКАТО;
            dohorig.OktmoPp  = oktmopp;                              // (поле 105)*
            dohorig.Kbk      = objNPST.KBK;
            dohorig.KbkPp    = dohorig.Kbk;                          // (поле 104)*
            dohorig.CodeCeli = "";
            dohorig.Inn      = objNPST.INN_PAY;
            dohorig.Kpp      = objNPST.KPP_PAY;
            dohorig.PlatName = objNPST.NAME_PAY;
            dohorig.Rs       = "";
            dohorig.Bic      = "";
            dohorig.BankName = "";

            // dohod
            dohod.DateOper    = objNP.DATE_END_PER;
            dohod.Date        = _dohodDbContext.GetSkipedWorkDay((DateTime)objNP.DATE_END_PER, importParam.DaysToSkip);
            dohod.NumPp       = objNPST.NOM_DOC;
            dohod.DatePp      = objNPST.DATE_DOC;
            dohod.NumZf       = null;
            dohod.DateZf      = null;
            dohod.OktmoId     = oktmo.Sysid;
            dohod.KbkId       = (await _dohodDbContext.IdentKbk(dohorig.Kbk)).Sysid;
            dohod.CodeCeliId  = null;
            dohod.PlatId      = (await _dohodDbContext.IdentPlat(dohorig)).Sysid;
            dohod.IsRaschet   = true;
            dohod.IsSumRazb   = false;
            dohod.SumItg      = (decimal)objNPST.SUM;
            dohod.ImnsInn     = objNPST.INN_ADB;
            dohod.ImnsKpp     = objNPST.KPP_ADB;
            dohod.LsAdb       = "";
            dohod.OsnPlat     = ""; // (поле 106)*
            dohod.VidOper     = objNPST.NAME_DOC;
            dohod.CodeVidOper = dohod.VidOper == "Платежное поручение" ? "01" : "";
            dohod.NaznPlat    = objNPST.NOTE; // Назначение платежа !!! в Фох считывали с какого то файла отдельно
            dohod.ImportFile  = importParam.FileName;
            dohod.IsNp        = dohorig.Kbk.IsNpCode();
            dohod.IsVoz       = false;
            dohod.IsItg       = false;
            dohod.LinkNp      = null;
            dohod.LinkVoz     = null;
            dohod.LinkItg     = null;
            dohod.Guid        = "";
            dohod.VidDoc      = VidDoc.NP;
            //
            dohod.Orig = dohorig;
            await _dohodDbContext.RazbivkaItogSum(dohod);

            return(dohod);
        }
Exemple #15
0
        public static async Task <bool> RazbivkaItogSum(this DohodDbContext dbContext, t_dohod dohod)
        {
            if (dohod == null)
            {
                return(false);
            }

            if (dohod.IsSumRazb ?? false)
            {
                // НЕ стандартная разбивка - просто зануляется суммы бюджетов
                dohod.SetEmptyBudgetSums();
                return(true);
            }

            if ((dohod.KbkId ?? 0) == 0)
            {
                return(false);
            }

            var sumitg = dohod.SumItg;
            var dic    = new Dictionary <string, decimal>();
            // Ищем сочетание КБК + ОКАТО + ПЕРИОД (в s_dohdop)
            var proc = await dbContext.s_kbkdop.Where(x
                                                      => x.KbkId == dohod.KbkId &&
                                                      (x.OktmoId == null || x.OktmoId == dohod.OktmoId) &&
                                                      (x.DateBeg == null || x.DateBeg <= dohod.DateOper) &&
                                                      (x.DateEnd == null || x.DateEnd >= dohod.DateOper))
                       .Select(x => new
            {
                x.ProcFed,
                x.ProcObl,
                x.ProcMest,
                x.ProcPos1,
                x.ProcPos2,
                x.ProcFond,
                x.ProcSmol,
                x.NumBudgKop
            }).FirstOrDefaultAsync();     // .ToListAsync();

            if (proc == null)
            {
                proc = await dbContext.s_kbk.Where(x => x.Sysid == dohod.KbkId)
                       .Select(x => new
                {
                    x.ProcFed,
                    x.ProcObl,
                    x.ProcMest,
                    x.ProcPos1,
                    x.ProcPos2,
                    x.ProcFond,
                    x.ProcSmol,
                    x.NumBudgKop
                }).FirstOrDefaultAsync();
            }

            if (proc != null)
            {
                // Расчет процентов
                dic.Add("SumFed", Math.Round(sumitg * (decimal)proc.ProcFed / 100, 2));
                dic.Add("SumObl", Math.Round(sumitg * (decimal)proc.ProcObl / 100, 2));
                dic.Add("SumMest", Math.Round(sumitg * (decimal)proc.ProcMest / 100, 2));
                dic.Add("SumPgt", Math.Round(sumitg * (decimal)proc.ProcPos1 / 100, 2));
                dic.Add("SumPst", Math.Round(sumitg * (decimal)proc.ProcPos2 / 100, 2));
                dic.Add("SumFond", Math.Round(sumitg * (decimal)proc.ProcFond / 100, 2));
                dic.Add("SumSmol", Math.Round(sumitg * (decimal)proc.ProcSmol / 100, 2));
                //
                // Коррекция по плавающей копейке
                var nelem = Math.Min(Math.Max(proc.NumBudgKop - 1 ?? 0, 0), dic.Count - 1);
                var key   = dic.ElementAt(nelem).Key;
                if (dic[key] == 0.0M) // не будем вешать на нулевую сумму
                {
                    key = dic.FirstOrDefault(x => x.Value != 0.0M).Key;
                }
                if (key != null)
                {
                    var sum = dic.Aggregate(0.0M, (a, b) => a + (b.Key == key ? 0.0M : b.Value));
                    dic[key] = sumitg - sum;
                }
                // Запись сумм
                dohod.SumFed  = dic["SumFed"];
                dohod.SumObl  = dic["SumObl"];
                dohod.SumMest = dic["SumMest"];
                dohod.SumPgt  = dic["SumPgt"];
                dohod.SumPst  = dic["SumPst"];
                dohod.SumFond = dic["SumFond"];
                dohod.SumSmol = dic["SumSmol"];
            }
            else
            {
                // нет КБК
                dohod.IsSumRazb = true; // Установи прзнак нестандартной
                dohod.SetEmptyBudgetSums();
                return(false);
            }

            return(true);
        }
Exemple #16
0
        private async Task <t_dohod> DohRecord(dynamic objVT, dynamic objVTOPER, ImportParam importParam)
        {
            t_dohod   dohod   = new t_dohod();
            t_dohorig dohorig = new t_dohorig();


            // вспомогательные
            var kodDoc = (string)objVTOPER.KOD_DOC; // "SF" или "UF"

            if (kodDoc != "UF")                     // филтр - Только UF
            {
                return(null);                       // c 20150216 - SF пишем только из *.SF файлов
            }
            dohorig.OktmoPp = objVTOPER.OKATO;      // (поле 105)*
            var oktmo = GetOktmo(dohorig.OktmoPp.Substr(0, 8), importParam, true);

            if (oktmo == null)
            {
                return(null);
            }

            // dohorig
            dohorig.Oktmo    = oktmo.Oktmo;
            dohorig.Kbk      = objVTOPER.KBK;
            dohorig.KbkPp    = ""; // (поле 104)*
            dohorig.CodeCeli = objVTOPER.ADD_KLASS;
            dohorig.Inn      = "";
            dohorig.Kpp      = "";
            dohorig.PlatName = "";
            dohorig.Rs       = "";
            dohorig.Bic      = "";
            dohorig.BankName = "";

            // dohod
            var date = (DateTime)objVT.DATE_OTCH;

            dohod.Date     = _dohodDbContext.GetSkipedWorkDay(date, importParam.DaysToSkip);
            dohod.DateOper = date;
            // Номер уведомления знаем, справки нет
            dohod.NumPp       = objVTOPER.NOM_DOC;
            dohod.DatePp      = objVTOPER.DATE_DOC;
            dohod.NumZf       = null;
            dohod.DateZf      = null;
            dohod.OktmoId     = oktmo.Sysid;
            dohod.KbkId       = (await _dohodDbContext.IdentKbk((string)objVTOPER.KBK)).Sysid;
            dohod.CodeCeliId  = (await _dohodDbContext.IdentKceli((string)objVTOPER.ADD_KLASS))?.Sysid;
            dohod.PlatId      = null;
            dohod.IsRaschet   = true;
            dohod.IsSumRazb   = false;
            dohod.SumItg      = (decimal)objVTOPER.SUM_ZACH;
            dohod.ImnsInn     = objVTOPER.INN_ADB;
            dohod.ImnsKpp     = objVTOPER.KPP_ADB;
            dohod.LsAdb       = "";
            dohod.OsnPlat     = "";                         // (поле 106)*
            dohod.CodeVidOper = "";                         // Нет ??
            dohod.VidOper     = "Уведомление об уточнении"; // dohod.CodeVidOper.GetVidOperName();
            dohod.NaznPlat    = "";                         // Назначение платежа
            dohod.ImportFile  = importParam.FileName;
            dohod.IsNp        = dohorig.Kbk.IsNpCode();
            dohod.IsVoz       = false;
            dohod.IsItg       = false;
            dohod.LinkNp      = null;
            dohod.LinkVoz     = null;
            dohod.LinkItg     = null;
            dohod.Guid        = objVTOPER.GUID;
            dohod.VidDoc      = VidDoc.VT;
            //
            dohod.Orig = dohorig;
            await _dohodDbContext.RazbivkaItogSum(dohod);

            return(dohod);
        }
Exemple #17
0
        private async Task <t_dohod> DohRecord(dynamic objZF, dynamic objZFPP, ImportParam importParam)
        {
            t_dohod   dohod   = new t_dohod();
            t_dohorig dohorig = new t_dohorig();

            // вспомогательные
            var oktmo = GetOktmo((string)objZF.OKATO_PP, importParam);

            //if (oktmo == null)
            //    return null;

            // dohorig
            dohorig.Oktmo    = objZF.OKATO_PP;
            dohorig.OktmoPp  = objZFPP.OKATO; // (поле 105)*
            dohorig.Kbk      = objZF.KBK_PP;
            dohorig.KbkPp    = objZFPP.KBK;   // (поле 104)*
            dohorig.CodeCeli = objZF.ADD_KLASS;
            dohorig.Inn      = objZF.INN_PL;
            dohorig.Kpp      = objZF.KPP_PL;
            dohorig.PlatName = objZF.CNAME_PL;
            dohorig.Rs       = objZFPP.BS_PAY;
            dohorig.Bic      = objZFPP.BIC_PAY;
            dohorig.BankName = objZFPP.NAME_BIC_PAY;

            // dohod
            dohod.DateOper   = objZF.DATE_ZF;
            dohod.Date       = _dohodDbContext.GetSkipedWorkDay(dohod.DateOper ?? default(DateTime), importParam.DaysToSkip);
            dohod.NumPp      = objZF.NUM_PP;
            dohod.DatePp     = objZF.DATE_PP;
            dohod.NumZf      = objZF.NOM_ZF;
            dohod.DateZf     = dohod.DateOper;
            dohod.OktmoId    = oktmo?.Sysid;
            dohod.KbkId      = (await _dohodDbContext.IdentKbk(dohorig.Kbk))?.Sysid;
            dohod.CodeCeliId = (await _dohodDbContext.IdentKceli(dohorig.CodeCeli))?.Sysid;
            dohod.PlatId     = (await _dohodDbContext.IdentPlat(dohorig)).Sysid;

            dohod.IsRaschet   = false; // всегда не показывается
            dohod.IsSumRazb   = false;
            dohod.SumItg      = (decimal)objZF.SUM_PP;
            dohod.ImnsInn     = objZFPP.INN_RCP;
            dohod.ImnsKpp     = objZFPP.KPP_RCP;
            dohod.LsAdb       = "";
            dohod.OsnPlat     = objZFPP.OSNPLAT;  // (поле 106)*
            dohod.CodeVidOper = objZFPP.VID_OPER;
            dohod.VidOper     = objZF.NAME_PP;    // dohod.CodeVidOper.GetVidOperName();
            dohod.NaznPlat    = objZF.PURPOSE_PP; // Назначение платежа
            dohod.ImportFile  = importParam.FileName;
            dohod.IsNp        = dohorig.Kbk.IsNpCode();
            dohod.IsVoz       = false;
            dohod.IsItg       = false;
            dohod.LinkNp      = null;
            dohod.LinkVoz     = null;
            dohod.LinkItg     = null;
            dohod.Guid        = objZFPP.GUID;
            dohod.VidDoc      = VidDoc.ZF;
            //
            dohod.Orig = dohorig;
            await _dohodDbContext.RazbivkaItogSum(dohod);

            return(dohod);
        }
Exemple #18
0
        private async Task <t_dohod> DohRecord(s_org org, dynamic objBD, dynamic objBDPD, dynamic objBDPDST, ImportParam importParam)
        {
            t_dohod   dohod   = new t_dohod();
            t_dohorig dohorig = new t_dohorig();

            // вспомогательные
            var oktmo = GetOktmo((string)objBDPDST.ОКАТО, importParam);

            if (oktmo == null)
            {
                return(null);
            }
            var iSign = (objBDPDST.DIR_SUM ?? "0") == "0" ? +1.0M : -1.0M; // 0 - зачисление; 1 - списание.

            // dohorig
            dohorig.Oktmo    = oktmo.Oktmo;   // objBDPDST.ОКАТО;
            dohorig.OktmoPp  = objBDPD.OKATO; // (поле 105)*
            dohorig.Kbk      = objBDPDST.KBK;
            dohorig.KbkPp    = objBDPD.KBK;   // (поле 104)*
            dohorig.CodeCeli = objBDPDST.ADD_KLASS;
            dohorig.Inn      = objBDPD.INN_PAY;
            dohorig.Kpp      = objBDPD.KPP_PAY;
            dohorig.PlatName = objBDPD.CNAME_PAY;
            dohorig.Rs       = objBDPD.BS_PAY;
            dohorig.Bic      = objBDPD.BIC_PAY;
            dohorig.BankName = objBDPD.NAME_BIC_PAY;

            // dohod
            dohod.Date        = _dohodDbContext.GetSkipedWorkDay((DateTime)objBDPD.DATE_IN_TOFK, importParam.DaysToSkip);
            dohod.DateOper    = objBDPD.DATE_IN_TOFK;
            dohod.NumPp       = objBDPD.NUM_PP;
            dohod.DatePp      = objBDPD.DATE_PP;
            dohod.NumZf       = null;
            dohod.DateZf      = null;
            dohod.OktmoId     = oktmo.Sysid;
            dohod.KbkId       = (await _dohodDbContext.IdentKbk((string)objBDPDST.KBK)).Sysid;
            dohod.CodeCeliId  = (await _dohodDbContext.IdentKceli((string)objBDPDST.ADD_KLASS))?.Sysid;
            dohod.PlatId      = org.Sysid;
            dohod.IsRaschet   = true;
            dohod.IsSumRazb   = false;
            dohod.SumItg      = (decimal)objBDPDST.SUM * iSign;
            dohod.ImnsInn     = objBDPD.INN_RCP;
            dohod.ImnsKpp     = objBDPD.KPP_RCP;
            dohod.LsAdb       = objBD.LS;
            dohod.OsnPlat     = objBDPD.OSNPLAT; // (поле 106)*
            dohod.CodeVidOper = objBDPD.VID_OPER;
            dohod.VidOper     = dohod.CodeVidOper.GetVidOperName();
            dohod.NaznPlat    = objBDPD.PURPOSE; // Назначение платежа
            dohod.ImportFile  = importParam.FileName;
            dohod.IsNp        = dohorig.Kbk.IsNpCode();
            dohod.IsVoz       = false;
            dohod.IsItg       = false;
            dohod.LinkNp      = null;
            dohod.LinkVoz     = null;
            dohod.LinkItg     = null;
            dohod.Guid        = objBDPD.GUID;
            dohod.VidDoc      = VidDoc.BD;
            //
            dohod.Orig = dohorig;
            await _dohodDbContext.RazbivkaItogSum(dohod);

            return(dohod);
        }
Exemple #19
0
 protected override async Task <t_dohod> GetExistingRecord(t_dohod dohod)
 {
     //  ЗАПИСЬ: НЕ ПРОВЕРЯЕТСЯ НАЛИЧИЕ ДРУГИХ ТИПОВ
     return(null);
 }
Exemple #20
0
        protected virtual Task <t_dohod> GetExistingRecord(t_dohod dohod)
        {
            t_dohod doh = null;

            return(Task.FromResult(doh));
        }
Exemple #21
0
        private async Task <t_dohod> DohRecord(s_org org, dynamic objHeader, dynamic objTb, ImportParam importParam, DateTime dtmin, DateTime dtmax)
        {
            if (org == null)
            {
                return(null);
            }
            if (string.IsNullOrWhiteSpace(objTb.KBK)) // филтр на запись "Итого"
            {
                return(null);
            }

            t_dohod   dohod   = new t_dohod();
            t_dohorig dohorig = new t_dohorig();

            //// вспомогательные
            var codeoktmo = ((string)objTb.OKATO).Substr(0, 8);
            var oktmo     = GetOktmo(codeoktmo, importParam);

            if (oktmo == null)
            {
                return(null);
            }

            DateTime operDate;
            DateTime skipedDate;

            if (objTb.DATE_IN_TOFK == null && dtmin != dtmax)
            {
                // в файле разные даты
                operDate   = dtmax;    // на последнюю дату
                skipedDate = dtmax;    // и без смещения
            }
            else
            {
                // файл за один день - общие правила
                operDate   = objTb.DATE_IN_TOFK == null ? dtmax : (DateTime)objTb.DATE_IN_TOFK;
                skipedDate = _dohodDbContext.GetSkipedWorkDay(operDate, importParam.DaysToSkip);
            }


            //// dohorig
            dohorig.Oktmo    = codeoktmo;
            dohorig.OktmoPp  = objTb.OKATO; // пишем необрезанный
            dohorig.Kbk      = objTb.KBK;
            dohorig.KbkPp    = "";          // (поле 104)*
            dohorig.CodeCeli = "";
            dohorig.Inn      = objTb.INN_PAY;
            dohorig.Kpp      = objTb.KPP_PAY;
            dohorig.PlatName = objTb.CNAME_PAY;
            dohorig.Rs       = "";
            dohorig.Bic      = "";
            dohorig.BankName = "";

            //// dohod
            dohod.Date        = skipedDate;
            dohod.DateOper    = operDate;
            dohod.NumPp       = objTb.NOM_PP;
            dohod.DatePp      = objTb.DATE_PP;
            dohod.NumZf       = null;
            dohod.DateZf      = null;
            dohod.OktmoId     = oktmo.Sysid;
            dohod.KbkId       = (await _dohodDbContext.IdentKbk((string)objTb.KBK)).Sysid;
            dohod.CodeCeliId  = null;
            dohod.PlatId      = org.Sysid;
            dohod.IsRaschet   = true;
            dohod.IsSumRazb   = false;
            dohod.SumItg      = (decimal)objTb.SUMMA; // Сумма со сзаком
            dohod.ImnsInn     = objTb.INN_RCP;
            dohod.ImnsKpp     = objTb.KPP_RCP;
            dohod.LsAdb       = "";
            dohod.OsnPlat     = "";                 // (поле 106)*
            dohod.CodeVidOper = objTb.VID_OPERNAME == "Платежное поручение" ? "01" : "";
            dohod.VidOper     = objTb.VID_OPERNAME; // dohod.CodeVidOper.GetVidOperName();
            dohod.NaznPlat    = objTb.PURPOSE;      // Назначение платежа
            dohod.ImportFile  = importParam.FileName;
            dohod.IsNp        = dohorig.Kbk.IsNpCode() && dohod.SumItg >= 0.0M;
            dohod.IsVoz       = false;
            dohod.IsItg       = false;
            dohod.LinkNp      = null;
            dohod.LinkVoz     = null;
            dohod.LinkItg     = null;
            dohod.Guid        = "";
            dohod.VidDoc      = VidDoc.XL;
            //
            dohod.Orig = dohorig;
            await _dohodDbContext.RazbivkaItogSum(dohod);

            return(dohod);
        }
Exemple #22
0
        private async Task WriteDohod(List <ExpandoObject> lst)
        {
            _dohodDbContext.TruncateDbTable(typeof(t_dohorig).Name);
            _dohodDbContext.TruncateDbTable(typeof(t_dohod).Name);

            foreach (dynamic obj in lst)
            {
                t_dohod dohod = new t_dohod()
                {
                    LinkVoz = null, LinkNp = null, LinkItg = null
                };
                t_dohorig dohorig = new t_dohorig();

                var codeDoc = (int)(obj.CODE_DOC ?? 0);
                var sysid   = (int)obj.SYSID;
                var linkNp  = (int?)obj.LINK_NP ?? 0;
                var linkVoz = (int?)obj.LINK_VOZ ?? 0;
                var linkItg = (int?)obj.LINK_ITG ?? 0;
                var isNp    = linkNp != 0;
                var isVoz   = linkVoz != 0;
                var isItg   = linkItg == -1;


                // dohorig =
                dohorig.Oktmo    = obj.OKATOFL;
                dohorig.OktmoPp  = obj.OKATO; // (поле 105)*
                dohorig.Kbk      = obj.KBK;
                dohorig.KbkPp    = obj.KBKPP; // (поле 104)*
                dohorig.CodeCeli = obj.KCELI;
                dohorig.Inn      = obj.INN;
                dohorig.Kpp      = obj.KPP;
                dohorig.PlatName = obj.PLAT_NAME;
                dohorig.Rs       = obj.RSCHET;
                dohorig.Bic      = obj.BIC;
                dohorig.KorSchet = obj.KOR_SCHET;
                dohorig.BankName = obj.BANK_NAME;

                var xx = (string)(obj.INN);

                // dohod
                dohod.Date        = obj.DATE;
                dohod.DateOper    = obj.DATE_OPER;
                dohod.NumPp       = obj.NUMPP;
                dohod.DatePp      = obj.DATEPP;
                dohod.NumZf       = obj.NOM_ZF;
                dohod.DateZf      = obj.DATE_ZF;
                dohod.OktmoId     = (obj.ID_OKATO ?? 0) > 0 ? obj.ID_OKATO : null; // (await _dohodDbContext.GetOkttoOnCode(dohorig.Oktmo))?.Sysid;
                dohod.KbkId       = (obj.ID_KBK ?? 0) > 0 ? obj.ID_KBK : null;     // (await _dohodDbContext.IdentKbk(dohorig.Kbk))?.Sysid;
                dohod.PlatId      = (obj.ID_PLAT ?? 0) > 0 ? obj.ID_PLAT : null;   // (await _dohodDbContext.IdentPlat(dohorig))?.Sysid; ;
                dohod.CodeCeliId  = (await _dohodDbContext.IdentKceli(dohorig.CodeCeli))?.Sysid;
                dohod.IsRaschet   = obj.RASCH ?? false;
                dohod.IsSumRazb   = obj.SUMRAZBN ?? false;
                dohod.SumItg      = (decimal)(obj.SUM_ITOG ?? 0.0M);
                dohod.SumFed      = (decimal)(obj.SUM_FED ?? 0.0M);
                dohod.SumObl      = (decimal)(obj.SUM_OBL ?? 0.0M);
                dohod.SumMest     = (decimal)(obj.SUM_MEST ?? 0.0M);
                dohod.SumPgt      = (decimal)(obj.SUM_DOP1 ?? 0.0M);
                dohod.SumPst      = (decimal)(obj.SUM_DOP2 ?? 0.0M);
                dohod.SumFond     = (decimal)(obj.SUM_FOND ?? 0.0M);
                dohod.SumSmol     = (decimal)(obj.SUM_SMLN ?? 0.0M);
                dohod.ImnsInn     = obj.IMNS_INN;
                dohod.ImnsKpp     = obj.IMNS_KPP;
                dohod.LsAdb       = obj.LS_ADB;
                dohod.OsnPlat     = obj.OSN_PLAT; // (поле 106)*
                dohod.CodeVidOper = codeDoc == 0 ? "" : codeDoc.ToString().PadLeft(2, '0');
                dohod.VidOper     = obj.VIDOPER;
                dohod.NaznPlat    = obj.NAZNPLAT; // Назначение платежа
                dohod.ImportFile  = obj.IMPFILE;

                dohod.IsVoz = isVoz;
                if (linkVoz > 0)
                {
                    dohod.LinkVoz = linkVoz;
                }
                dohod.IsNp = isNp;
                if (linkNp > 0)
                {
                    dohod.LinkNp = linkNp;
                }
                dohod.IsItg = isItg;
                if (linkItg > 0)
                {
                    dohod.LinkItg = linkItg;
                }

                dohod.Guid   = obj.GUID;
                dohod.VidDoc = (VidDoc)(obj.VIDDOC ?? 0);
                if (dohod.VidDoc == VidDoc.CE && Path.GetExtension(dohod.ImportFile).ToUpper().StartsWith(".SE"))
                {
                    dohod.VidDoc = VidDoc.SE;
                }
                dohod.Sysid     = sysid;
                dohorig.Sysid   = sysid;
                dohorig.DohodId = sysid;

                FillAppEditFields(obj, dohod);
                FillAppEditFields(obj, dohorig);
                await _dohodDbContext.t_dohod.AddAsync(dohod);

                await _dohodDbContext.t_dohorig.AddAsync(dohorig);
            }
            await _dohodDbContext.SaveChangesAsync();

            return;
        }
Exemple #23
0
        private async Task <t_dohod> DohRecord(s_lev lev, dynamic objSE, dynamic obj, ImportParam importParam)
        {
            t_dohod   dohod   = new t_dohod();
            t_dohorig dohorig = new t_dohorig();

            if (obj.TYPE_KBK != "20")
            {
                return(null);
            }
            if (lev == null)
            {
                return(null);
            }

            // вспомогательные
            var oktmopp = lev?.Oktmo ?? "";
            //  Для IP пока не фильтруем по m.o.idOkato = 0
            var oktmo = GetOktmo(oktmopp.Substr(0, 8), importParam);

            // dohorig
            dohorig.Oktmo    = oktmo?.Oktmo;
            dohorig.OktmoPp  = oktmopp; // (поле 105)*
            dohorig.Kbk      = obj.KBK;
            dohorig.KbkPp    = obj.KBK; // (поле 104)*
            dohorig.CodeCeli = obj.ADD_KLASS;
            dohorig.Inn      = "";
            dohorig.Kpp      = "";
            dohorig.PlatName = "";
            dohorig.Rs       = lev?.Schet ?? "";
            dohorig.Bic      = "";
            dohorig.BankName = "";

            // dohod
            dohod.DateOper   = objSE.DATE_SP;
            dohod.Date       = dohod.DateOper; // _dohodDbContext.GetSkipedWorkDay(dohod.DateOper ?? default(DateTime), importParam.DaysToSkip);
            dohod.NumPp      = "";
            dohod.DatePp     = dohod.DateOper;
            dohod.NumZf      = null;
            dohod.DateZf     = null;
            dohod.OktmoId    = oktmo?.Sysid;
            dohod.KbkId      = (await _dohodDbContext.IdentKbk(dohorig.Kbk)).Sysid;
            dohod.CodeCeliId = (await _dohodDbContext.IdentKceli(dohorig.CodeCeli))?.Sysid;
            dohod.PlatId     = null;
            dohod.IsRaschet  = false; // ДЛЯ IP
            dohod.IsSumRazb  = true;  // true - Нестандартная разбивка по бюджетам - Разбивку не производим - только зануляем суммы по бюджетам
            if (obj.Marker == "SPOST")
            {
                dohod.SumItg = (decimal)obj.SUM_POST;
            }
            else if (obj.Marker == "SVIP")
            {
                dohod.SumItg = (decimal)obj.SUM_VIP;
            }
            dohod.ImnsInn     = lev == null ? "" : lev.Inn;
            dohod.ImnsKpp     = lev == null ? "" : lev.Kpp;
            dohod.LsAdb       = "";
            dohod.OsnPlat     = ""; // (поле 106)*
            dohod.CodeVidOper = "";
            dohod.VidOper     = "";
            dohod.NaznPlat    = ""; // Назначение платежа
            dohod.ImportFile  = importParam.FileName;
            dohod.IsNp        = dohorig.Kbk.IsNpCode();
            dohod.IsVoz       = false;
            dohod.IsItg       = false;
            dohod.LinkNp      = null;
            dohod.LinkVoz     = null;
            dohod.LinkItg     = null;
            dohod.Guid        = "";
            dohod.VidDoc      = VidDoc.SE;
            //
            dohod.Orig = dohorig;
            await _dohodDbContext.RazbivkaItogSum(dohod);

            return(dohod);
        }
Exemple #24
0
        protected override async Task <t_dohod> GetExistingRecord(t_dohod dohod)
        {
            // 1.Ищем только записи для замены среди XL записей,
            // 2. пропуска среди NP записей(добавили VIDDOC_VT 20140507)
            // Если несколько записей с совпадающими параметрами, берем первую aTmp[1], далее,
            // их число будет уменьшатся, так как изменяем DOHOD.VIDDOC на VIDDOC_BD
            var query = await _dohodDbContext.t_dohod.AsNoTracking()
                        .Where(w => w.DateOper == dohod.DateOper &&
                               w.VidDoc == VidDoc.BD &&
                               w.PlatId == dohod.PlatId &&
                               w.KbkId == dohod.KbkId &&
                               w.NumPp == dohod.NumPp &&
                               w.SumItg == dohod.SumItg)
                        .Include(x => x.Orig)
                        .ToListAsync();

            if (query.Count == 0)
            {
                query = await _dohodDbContext.t_dohod.AsNoTracking()
                        .Where(w => w.DatePp == dohod.DatePp &&
                               w.VidDoc == VidDoc.XL &&
                               w.PlatId == dohod.PlatId &&
                               w.KbkId == dohod.KbkId &&
                               w.OktmoId == dohod.OktmoId &&
                               w.NumPp == dohod.NumPp &&
                               w.SumItg == dohod.SumItg &&
                               (w.IsRaschet ?? false))
                        .Include(x => x.Orig)
                        .ToListAsync();
            }
            if (query.Count == 0)
            {
                // Ищем еще сред VT - но другие параметры ИНН - КПП нет в VT
                // Ищем еще среди SV приоритет NP - 201502012
                query = await _dohodDbContext.t_dohod.AsNoTracking()
                        .Where(w => w.DateOper == dohod.DateOper &&
                               (w.VidDoc == VidDoc.VT || w.VidDoc == VidDoc.SF) &&
                               w.DatePp == dohod.DatePp &&
                               w.KbkId == dohod.KbkId &&
                               w.NumPp == dohod.NumPp &&
                               w.SumItg == dohod.SumItg)
                        .Include(x => x.Orig)
                        .ToListAsync();
            }
            if (query.Count == 0)
            {
                // Ищем еще сред NT - в файлах раиона и поселения бывает одинакоые записи
                // - а район имортирует файлы поселений тоже(Одинцово)
                query = await _dohodDbContext.t_dohod.AsNoTracking()
                        .Where(w => w.DateOper == dohod.DateOper &&
                               w.VidDoc == VidDoc.NP &&
                               w.DatePp == dohod.DatePp &&
                               w.PlatId == dohod.PlatId &&
                               w.KbkId == dohod.KbkId &&
                               w.SumItg == dohod.SumItg &&
                               !(w.ImportFile == dohod.ImportFile))             // для решения проблемы, если несколько одинаковых записей
                        .Include(x => x.Orig)
                        .ToListAsync();
            }
            return(query.FirstOrDefault());
        }