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); }
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); }
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()); }
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); }
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); }
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; }
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); }
// 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()); }
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()); }
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()); }
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); }
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()); }
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); }
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); }
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); }
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); }
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); }
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); }
protected override async Task <t_dohod> GetExistingRecord(t_dohod dohod) { // ЗАПИСЬ: НЕ ПРОВЕРЯЕТСЯ НАЛИЧИЕ ДРУГИХ ТИПОВ return(null); }
protected virtual Task <t_dohod> GetExistingRecord(t_dohod dohod) { t_dohod doh = null; return(Task.FromResult(doh)); }
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); }
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; }
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); }
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()); }