public async Task <object> ParserFormat(object doc, ImportParam importParam) { await DeleteTheFileData(importParam); var dohods = new List <t_dohod>(); dynamic objBD = null; dynamic objBDPD = null; s_org org = null; foreach (dynamic obj in (List <ExpandoObject>)doc) { switch (obj.Marker) { case "BD": if (!FilterBD(obj)) { continue; } objBD = obj; break; case "BDPD": if (objBD == null) { continue; } org = await _dohodDbContext.IdentPlat((string)obj.INN_PAY, (string)obj.KPP_PAY, (string)obj.CNAME_PAY, (string)obj.BS_PAY); if (org == null) { continue; } objBDPD = obj; break; case "BDPDST": if (objBDPD == null) { continue; } var dohod = await DohRecord(org, objBD, objBDPD, obj, importParam); dohod = await ChechRecord(dohod, importParam); if (dohod == null) { continue; } dohods.Add(dohod); break; default: objBDPD = null; break; } } return(dohods); }
public async Task WriteOrg(List <ExpandoObject> lst) { _dohodDbContext.TruncateDbTable(typeof(s_org).Name); _dohodDbContext.TruncateDbTable(typeof(s_orgokved).Name); foreach (dynamic obj in lst) { var org = new s_org(); org.Sysid = (int)obj.SYSID; org.Inn = obj.INN; org.Kpp = obj.KPP; org.Oktmo = ""; org.Name = obj.NAME_S; org.FullName = obj.NAME; org.TypeOrg = (int)(obj.TYPEPLAT ?? 0); org.Dop1Id = (obj.ID_DOP1 ?? 0) > 0 ? obj.ID_DOP1 : null; org.Dop2Id = (obj.ID_DOP2 ?? 0) > 0 ? obj.ID_DOP2 : null; org.Dop3Id = (obj.ID_DOP3 ?? 0) > 0 ? obj.ID_DOP3 : null; org.RukDolzn = obj.RUKDOLZN; org.Rukovod = obj.RUKOVOD; org.Glavbuh = obj.GLAVBUH; org.Phone = obj.PHONE; org.Fax = obj.FAX; org.AdresJure = obj.ADDR_JURE; org.AdresFakt = obj.ADDR_FACT; FillAppEditFields(obj, org); await _dohodDbContext.s_org.AddAsync(org); } await _dohodDbContext.SaveChangesAsync(); }
public static async Task <s_org> AddOrg(this DohodDbContext dbContext, string inn, string kpp, string name, string rs) { // Внести изменение в пополнение справочника Плательщики. 20150406 // Если плательщиком является организация(банк) с реквизитами ИНН и КПП юр.лица, // а в наименовании плательщика дополнительно(//.....) указывается ФИО физ.лица, // то в справочник Плательщики в наименовании записывать имя без дополнительных реквизитов var nameForDictionary = name; if (inn.Length == 10 && kpp.Length == 9) { nameForDictionary = name.Split("//")[0]; } var typePlat = inn.Length == 10 ? 1 :2; var org = new s_org() { Inn = inn, Kpp = kpp, Name = nameForDictionary, FullName = nameForDictionary, TypeOrg = 0, AdresJure = "", // в фоксе при импорте не записывались AdresFakt = "" // в фоксе при импорте не записывались }; var res = await dbContext.s_org.AddAsync(org); await dbContext.SaveChangesAsync(); // тест org.Sysid = res.Entity.Sysid; if (!string.IsNullOrWhiteSpace(rs)) { var schet = new s_schet() { OrgId = org.Sysid, BankId = null, // в фоксе банки не записывались Rs = rs }; await dbContext.s_schet.AddAsync(schet); await dbContext.SaveChangesAsync(); } return(org); }
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 <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); }
public static async Task <s_org> IdentPlat(this DohodDbContext dbContext, string inn, string kpp, string name, string rs, bool isToAdd = true) { //if(dbContext.s_org.Local.Count==0) // await dbContext.s_org.LoadAsync(); s_org org = null; if (!string.IsNullOrWhiteSpace(inn) && inn != "0" && !string.IsNullOrWhiteSpace(kpp) && kpp != "0") { org = dbContext.s_org.AsNoTracking().Where(x => x.Inn == inn && x.Kpp == kpp).FirstOrDefault(); } else if (!string.IsNullOrWhiteSpace(inn) && inn != "0" && (string.IsNullOrWhiteSpace(kpp) || kpp == "0")) { // Сначала поиск только среди с пустым kpp org = dbContext.s_org.AsNoTracking().Where(x => x.Inn == inn && (x.Kpp == "" || x.Kpp == "0")).OrderBy(x => x.Sysid).FirstOrDefault(); if (org == null) { org = dbContext.s_org.AsNoTracking().Where(x => x.Inn == inn).OrderBy(x => x.Sysid).FirstOrDefault(); } } else if (string.IsNullOrWhiteSpace(inn) && string.IsNullOrWhiteSpace(name)) { // Для пустых ИНН и Name == ЭТО == "Неизвестный плательщик" тип ему:2 - частное лицо // КПП -не учитываем, считаем пустым org = dbContext.s_org.AsNoTracking().Where(x => x.Inn == "" && x.Kpp == "" && x.Name == Constant.UnknownOrg).FirstOrDefault(); } else if (string.IsNullOrWhiteSpace(inn) && name == Constant.VidDocKorOrg) { // Для пустых ИНН и Name = VidDocKorOrg == ЭТО == "Корректирующий платеж" тип ему:2 - частное лицо // КПП -не учитываем, считаем пустым org = dbContext.s_org.AsNoTracking().Where(x => x.Inn == "" && x.Kpp == "" && x.Name == Constant.VidDocKorOrg).FirstOrDefault(); } else if ((string.IsNullOrWhiteSpace(inn) || inn == "0") && !string.IsNullOrWhiteSpace(name)) { // Для пустых ИНН по наименованию(с учетом КПП если есть) if (string.IsNullOrWhiteSpace(kpp) || kpp == "0") { org = dbContext.s_org.AsNoTracking().Where(x => (x.Inn == "" || x.Inn == "0") && (x.Kpp == "" || x.Kpp == "0") && (x.Name == name || x.FullName == name)).FirstOrDefault(); } else { org = dbContext.s_org.AsNoTracking().Where(x => (x.Inn == "" || x.Inn == "0") && (x.Kpp == kpp) && (x.Name == name || x.FullName == name)).FirstOrDefault(); } } var lll = name.Length; if (org == null && isToAdd) { org = await dbContext.AddOrg(inn, kpp, name, rs); } return(org); }