예제 #1
0
        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);
        }
예제 #2
0
        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();
        }
예제 #3
0
파일: Fn.cs 프로젝트: paxan89/Monica
        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);
        }
예제 #4
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);
        }
예제 #5
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);
        }
예제 #6
0
파일: Fn.cs 프로젝트: paxan89/Monica
        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);
        }