Example #1
0
        public FacturaControlInfoViewModel(AccountsModel DAccountsModel, string nomerf, string contr)
        {
            Title = string.Format("Справка движение по фактура {0} и контрагент {1} по сметка {2}", nomerf, contr,
                                  DAccountsModel.ShortName);
            AllMovement = new ObservableCollection <AccItemSaldo>(Context.GetInfoFactura(DAccountsModel.Id, DAccountsModel.TypeAccountEx, nomerf, contr));
            AccItemSaldo accItemSaldo = new AccItemSaldo();
            var          rezi         = Context.GetAllAnaliticSaldos(DAccountsModel.Id, DAccountsModel.FirmaId);
            var          saldo        = rezi.FirstOrDefault(e => e.NameContragent.Trim() == contr.Trim() && e.NumInvoise.Trim() == nomerf.Trim());

            if (saldo != null)
            {
                accItemSaldo.Nsd = saldo.BeginSaldoDebit;
                accItemSaldo.Nsc = saldo.BeginSaldoCredit;
            }

            accItemSaldo.Type = DAccountsModel.TypeAccountEx;
            accItemSaldo.Od   = AllMovement.Sum(e => e.Od);
            accItemSaldo.Oc   = AllMovement.Sum(e => e.Oc);
            Ns = string.Format("Начално дебитно салдо {0} Начално кредитно салдо {1}", accItemSaldo.Nsd, accItemSaldo.Nsc);
            Ks = string.Format("Краино дебитно салдо {0} Крайно кредитно салдо {1}", accItemSaldo.Ksd, accItemSaldo.Ksc);
        }
Example #2
0
        public List <List <string> > GetItems()
        {
            _movements = new List <AccItemSaldo>();
            var _movements1 = new List <AccItemSaldo>();
            var items       = new List <List <string> >();
            var rezi        = Context.GetAllAnaliticSaldos(accountsModel.Id, accountsModel.FirmaId);
            var megaalld    = new List <InvoiseControl>(Context.GetFullInvoiseContoDebit(accountsModel.Id, true));
            var megaallc    = new List <InvoiseControl>(Context.GetFullInvoiseContoCredit(accountsModel.Id, true));

            AllMovementDebit  = new ObservableCollection <InvoiseControl>(megaalld.Where(e => e.DataInvoise < FromDate));
            AllMovementCredit = new ObservableCollection <InvoiseControl>(megaallc.Where(e => e.DataInvoise < FromDate));
            var AllMovementDebit1  = new ObservableCollection <InvoiseControl>(megaalld.Where(e => e.DataInvoise >= FromDate && e.DataInvoise <= ToDate));
            var AllMovementCredit1 = new ObservableCollection <InvoiseControl>(megaallc.Where(e => e.DataInvoise >= FromDate && e.DataInvoise <= ToDate));

            foreach (InvoiseControl invoiseControl in AllMovementDebit)
            {
                var item = new AccItemSaldo();
                item.NInvoise       = invoiseControl.NInvoise;
                item.NameContragent = invoiseControl.NameContragent;
                item.Code           = invoiseControl.CodeContragent;
                item.Od             = invoiseControl.Oborot;
                item.Type           = accountsModel.TypeAccount;
                if (item.Type == 1)
                {
                    item.Data = invoiseControl.DataInvoise;
                }
                var lc =
                    AllMovementCredit.FirstOrDefault(
                        w => w.CodeContragent == invoiseControl.CodeContragent && w.NInvoise == invoiseControl.NInvoise);
                if (lc != null)
                {
                    item.Oc += lc.Oborot;
                    if (item.Type == 2)
                    {
                        item.Data = lc.DataInvoise;
                    }
                    AllMovementCredit.Remove(lc);
                }
                _movements.Add(item);
            }
            foreach (InvoiseControl invoiseControl in AllMovementCredit)
            {
                var item = new AccItemSaldo();
                item.NInvoise       = invoiseControl.NInvoise;
                item.NameContragent = invoiseControl.NameContragent;
                item.Code           = invoiseControl.CodeContragent;
                item.Oc             = invoiseControl.Oborot;
                item.Type           = accountsModel.TypeAccount;
                item.Data           = invoiseControl.DataInvoise;
                _movements.Add(item);
            }
            foreach (AccItemSaldo accItemSaldo in _movements)
            {
                var saldo =
                    rezi.FirstOrDefault(
                        m => m.Code == accItemSaldo.Code && m.NumInvoise == accItemSaldo.NInvoise);
                if (saldo != null)
                {
                    accItemSaldo.Nsd = saldo.BeginSaldoDebit;
                    accItemSaldo.Nsc = saldo.BeginSaldoCredit;
                    rezi.Remove(saldo);
                }
            }
            foreach (var item in rezi.OrderBy(e => e.Code))
            {
                var item1 = new AccItemSaldo();
                item1.NInvoise       = item.NumInvoise;
                item1.NameContragent = item.NameContragent;
                item1.Code           = item.Code;
                item1.Od             = 0;
                item1.Nsd            = item.BeginSaldoDebit;
                item1.Nsc            = item.BeginSaldoCredit;
                item1.Type           = accountsModel.TypeAccount;
                item1.Data           = item.Date;
                _movements.Add(item1);
            }

            if (typerep == 1)
            {
                string contr = "";
                var    filt  = filter.Split('|');
                if (filt.Length > 0)
                {
                    contr      = filt[1].Trim();
                    _movements = new List <AccItemSaldo>(_movements.Where(w => w.Code == contr));
                }
            }
            foreach (InvoiseControl invoiseControl in AllMovementDebit1)
            {
                var item = new AccItemSaldo();
                item.NInvoise       = invoiseControl.NInvoise;
                item.NameContragent = invoiseControl.NameContragent;
                item.Code           = invoiseControl.CodeContragent;
                item.Od             = invoiseControl.Oborot;
                item.Type           = accountsModel.TypeAccount;
                if (item.Type == 1)
                {
                    item.Data = invoiseControl.DataInvoise;
                }
                var lc =
                    AllMovementCredit1.FirstOrDefault(
                        w => w.CodeContragent == invoiseControl.CodeContragent && w.NInvoise == invoiseControl.NInvoise);
                if (lc != null)
                {
                    item.Oc += lc.Oborot;
                    if (item.Type == 2)
                    {
                        item.Data = lc.DataInvoise;
                    }
                    AllMovementCredit1.Remove(lc);
                }
                _movements1.Add(item);
            }
            foreach (InvoiseControl invoiseControl in AllMovementCredit1)
            {
                var item = new AccItemSaldo();
                item.NInvoise       = invoiseControl.NInvoise;
                item.NameContragent = invoiseControl.NameContragent;
                item.Code           = invoiseControl.CodeContragent;
                item.Oc             = invoiseControl.Oborot;
                item.Type           = accountsModel.TypeAccount;
                item.Data           = invoiseControl.DataInvoise;

                _movements1.Add(item);
            }
            foreach (AccItemSaldo accItemSaldo in _movements1)
            {
                var saldo =
                    _movements.FirstOrDefault(
                        m => m.Code == accItemSaldo.Code && m.NInvoise == accItemSaldo.NInvoise);
                if (saldo != null)
                {
                    accItemSaldo.Nsd = saldo.Nsd + saldo.Od;
                    accItemSaldo.Nsc = saldo.Nsc + saldo.Oc;
                    _movements.Remove(saldo);
                }
            }
            foreach (var item in _movements.OrderBy(e => e.Code))
            {
                var item1 = new AccItemSaldo();
                item1.NInvoise       = item.NInvoise;
                item1.NameContragent = item.NameContragent;
                item1.Code           = item.Code;
                item1.Nsd            = item.Nsd + item.Od;
                item1.Nsc            = item.Nsc + item.Oc;
                item1.Type           = accountsModel.TypeAccount;
                item1.Data           = item.Data;
                _movements1.Add(item1);
            }

            if (typerep == 1)
            {
                string contr = "";
                var    filt  = filter.Split('|');
                if (filt.Length > 0)
                {
                    contr       = filt[1].Trim();
                    _movements1 = new List <AccItemSaldo>(_movements1.Where(w => w.Code == contr));
                }
            }

            string name  = "";
            string code  = "";
            bool   first = true;

            decimal sumansc  = 0;
            decimal sumaOc   = 0;
            decimal sumansd  = 0;
            decimal sumaOd   = 0;
            decimal sumansct = 0;
            decimal sumaOct  = 0;
            decimal sumansdt = 0;
            decimal sumaOdt  = 0;
            var     query    = (from t in _movements1
                                group t by new { t.NInvoise, t.Code }
                                into grp
                                select new AccItemSaldo
            {
                NInvoise = grp.Key.NInvoise,
                NameContragent = grp.Last().NameContragent,
                Code = grp.Key.Code,
                Oc = grp.Sum(t => t.Oc),
                Od = grp.Sum(t => t.Od),
                Nsc = grp.Sum(t => t.Nsc),
                Nsd = grp.Sum(t => t.Nsd),
                Data = grp.Max(t => t.Data),
                Reason = grp.First().Reason,
                Folder = grp.First().Folder,
                DocNumber = grp.First().DocNumber
            });

            foreach (AccItemSaldo itemSaldo in query.OrderBy(m => m.Cod))
            {
                List <string> row = new List <string>();
                if (first)
                {
                    name  = itemSaldo.NameContragent;
                    code  = itemSaldo.Code;
                    first = false;
                }
                else
                {
                    if (code != itemSaldo.Code && WithContragentSum)
                    {
                        if (!OnlyContragent)
                        {
                            items.Add(new List <string> {
                                "-----------------------------------",
                                "---------------------------------------------------------------------------------------",
                                "---------------------------------------------------------------------------------------",
                                "-----------------------------------",
                                "-----------------------------------",
                                "-----------------------------------",
                                "-----------------------------------",
                                "-----------------------------------"
                            });
                        }
                        List <string> rowTotal = new List <string>();
                        if (!OnlyContragent)
                        {
                            rowTotal.Add("");
                            rowTotal.Add("");
                        }
                        else
                        {
                            rowTotal.Add(code);
                            rowTotal.Add(name);
                        }
                        rowTotal.Add("");
                        rowTotal.Add(" Общо :");
                        //row.Add(itemSaldo.Nsd.ToString(Vf.LevFormatUI));
                        if (accountsModel.TypeAccount != 1)
                        {
                            var ks = sumansc + sumaOc - sumansd - sumaOd;
                            var ns = (sumansc - sumansd);
                            rowTotal.Add(ns.ToString(Vf.LevFormatUI));
                            rowTotal.Add(sumaOd.ToString(Vf.LevFormatUI));
                            rowTotal.Add(sumaOc.ToString(Vf.LevFormatUI));
                            rowTotal.Add(ks.ToString(Vf.LevFormatUI));
                        }
                        else
                        {
                            var ks = sumansd + sumaOd - sumansc - sumaOc;
                            var ns = (sumansd - sumansc);
                            rowTotal.Add(ns.ToString(Vf.LevFormatUI));
                            rowTotal.Add(sumaOd.ToString(Vf.LevFormatUI));
                            rowTotal.Add(sumaOc.ToString(Vf.LevFormatUI));
                            rowTotal.Add(ks.ToString(Vf.LevFormatUI));
                        }
                        items.Add(rowTotal);
                        if (!OnlyContragent)
                        {
                            items.Add(new List <string> {
                                "-----------------------------------",
                                "---------------------------------------------------------------------------------------",
                                "---------------------------------------------------------------------------------------",
                                "-----------------------------------",
                                "-----------------------------------",
                                "-----------------------------------",
                                "-----------------------------------",
                                "-----------------------------------"
                            });
                        }
                        sumansc = 0;
                        sumansd = 0;
                        sumaOc  = 0;
                        sumaOd  = 0;
                        name    = itemSaldo.NameContragent;
                        code    = itemSaldo.Code;
                    }
                }

                sumansc  += itemSaldo.Nsc;
                sumansd  += itemSaldo.Nsd;
                sumaOc   += itemSaldo.Oc;
                sumaOd   += itemSaldo.Od;
                sumansct += itemSaldo.Nsc;
                sumansdt += itemSaldo.Nsd;
                sumaOct  += itemSaldo.Oc;
                sumaOdt  += itemSaldo.Od;
                //row.Add(itemSaldo.Nsd.ToString(Vf.LevFormatUI));
                if (accountsModel.TypeAccount != 1)
                {
                    itemSaldo.Ks = itemSaldo.Nsc + itemSaldo.Oc - itemSaldo.Nsd - itemSaldo.Od;
                    itemSaldo.Ns = itemSaldo.Nsc - itemSaldo.Nsd;
                }
                else
                {
                    itemSaldo.Ks = itemSaldo.Nsd + itemSaldo.Od - itemSaldo.Nsc - itemSaldo.Oc;
                    itemSaldo.Ns = itemSaldo.Nsd - itemSaldo.Nsc;
                }
                if (!OnlyContragent)
                {
                    if (!(itemSaldo.Ns == 0 && itemSaldo.Od == 0 && itemSaldo.Oc == 0 && itemSaldo.Ks == 0))
                    {
                        row.Add(itemSaldo.Code);
                        row.Add(itemSaldo.NameContragent);
                        row.Add(itemSaldo.NInvoise);
                        row.Add(string.Format("{0}.{1}.{2}", itemSaldo.Data.Day.ToZeroString(2), itemSaldo.Data.Month.ToZeroString(2), itemSaldo.Data.Year.ToZeroString(4)));
                        row.Add(itemSaldo.Ns.ToString(Vf.LevFormatUI));
                        row.Add(itemSaldo.Od.ToString(Vf.LevFormatUI));
                        row.Add(itemSaldo.Oc.ToString(Vf.LevFormatUI));
                        row.Add(itemSaldo.Ks.ToString(Vf.LevFormatUI));
                        items.Add(row);
                    }
                }
                //row.Add(itemSaldo.Ksc.ToString(Vf.LevFormatUI));
            }
            if (WithContragentSum)
            {
                if (!OnlyContragent)
                {
                    items.Add(new List <string> {
                        "-----------------------------------",
                        "---------------------------------------------------------------------------------------",
                        "---------------------------------------------------------------------------------------",
                        "-----------------------------------",
                        "-----------------------------------",
                        "-----------------------------------",
                        "-----------------------------------",
                        "-----------------------------------"
                    });
                }
                List <string> rowTotalLas = new List <string>();
                if (!OnlyContragent)
                {
                    rowTotalLas.Add("");
                    rowTotalLas.Add("");
                }
                else
                {
                    rowTotalLas.Add(code);
                    rowTotalLas.Add(name);
                }
                rowTotalLas.Add("");
                rowTotalLas.Add(" Общо :");
                //row.Add(itemSaldo.Nsd.ToString(Vf.LevFormatUI));
                if (accountsModel.TypeAccount != 1)
                {
                    var ks = sumansc + sumaOc - sumansd - sumaOd;
                    var ns = sumansc - sumansd;
                    rowTotalLas.Add(ns.ToString(Vf.LevFormatUI));
                    rowTotalLas.Add(sumaOd.ToString(Vf.LevFormatUI));
                    rowTotalLas.Add(sumaOc.ToString(Vf.LevFormatUI));
                    rowTotalLas.Add(ks.ToString(Vf.LevFormatUI));
                }
                else
                {
                    var ks = sumansd + sumaOd - sumansc - sumaOc;
                    var ns = sumansd - sumansc;
                    rowTotalLas.Add(ns.ToString(Vf.LevFormatUI));
                    rowTotalLas.Add(sumaOd.ToString(Vf.LevFormatUI));
                    rowTotalLas.Add(sumaOc.ToString(Vf.LevFormatUI));
                    rowTotalLas.Add(ks.ToString(Vf.LevFormatUI));
                }
                items.Add(rowTotalLas);
            }
            items.Add(new List <string> {
                "-----------------------------------",
                "---------------------------------------------------------------------------------------",
                "---------------------------------------------------------------------------------------",
                "-----------------------------------",
                "-----------------------------------",
                "-----------------------------------",
                "-----------------------------------",
                "-----------------------------------"
            });
            List <string> rowTotalLast = new List <string>();

            rowTotalLast.Add("");
            rowTotalLast.Add("");
            rowTotalLast.Add("");
            rowTotalLast.Add(" Общо :");
            //row.Add(itemSaldo.Nsd.ToString(Vf.LevFormatUI));
            if (accountsModel.TypeAccount != 1)
            {
                var ks = sumansct + sumaOct - sumansdt - sumaOdt;
                var ns = sumansct - sumansdt;
                rowTotalLast.Add(ns.ToString(Vf.LevFormatUI));
                rowTotalLast.Add(sumaOdt.ToString(Vf.LevFormatUI));
                rowTotalLast.Add(sumaOct.ToString(Vf.LevFormatUI));
                rowTotalLast.Add(ks.ToString(Vf.LevFormatUI));
            }
            else
            {
                var ks = sumansdt + sumaOdt - sumansct - sumaOct;
                var ns = sumansdt - sumansct;
                rowTotalLast.Add(ns.ToString(Vf.LevFormatUI));
                rowTotalLast.Add(sumaOdt.ToString(Vf.LevFormatUI));
                rowTotalLast.Add(sumaOct.ToString(Vf.LevFormatUI));
                rowTotalLast.Add(ks.ToString(Vf.LevFormatUI));
            }
            items.Add(rowTotalLast);
            return(items);
        }
        public List <List <string> > GetItems()
        {
            _movements  = new List <AccItemSaldo>();
            _movements1 = new List <AccItemSaldo>();
            var items = new List <List <string> >();
            var rezi  = Context.GetAllAnaliticSaldos(accountsModel.Id, accountsModel.FirmaId);

            if (accountsModel.TypeAccount == 1)
            {
                AllMovementDebit   = new ObservableCollection <InvoiseControl>(Context.GetFullInvoiseContoDebit(accountsModel.Id).Where(e => e.DataInvoise < FromDate));
                AllMovementCredit  = new ObservableCollection <InvoiseControl>(Context.GetFullInvoiseContoCredit(accountsModel.Id, true).Where(e => e.DataInvoise < FromDate));
                AllMovementDebit1  = new ObservableCollection <InvoiseControl>(Context.GetFullInvoiseContoDebit(accountsModel.Id).Where(e => e.DataInvoise >= FromDate && e.DataInvoise <= ToDate));
                AllMovementCredit1 = new ObservableCollection <InvoiseControl>(Context.GetFullInvoiseContoCredit(accountsModel.Id, true).Where(e => e.DataInvoise >= FromDate && e.DataInvoise <= ToDate));
            }
            else
            {
                AllMovementDebit   = new ObservableCollection <InvoiseControl>(Context.GetFullInvoiseContoDebit(accountsModel.Id, true).Where(e => e.DataInvoise < FromDate));
                AllMovementCredit  = new ObservableCollection <InvoiseControl>(Context.GetFullInvoiseContoCredit(accountsModel.Id).Where(e => e.DataInvoise < FromDate));
                AllMovementDebit1  = new ObservableCollection <InvoiseControl>(Context.GetFullInvoiseContoDebit(accountsModel.Id).Where(e => e.DataInvoise >= FromDate && e.DataInvoise <= ToDate));
                AllMovementCredit1 = new ObservableCollection <InvoiseControl>(Context.GetFullInvoiseContoCredit(accountsModel.Id, true).Where(e => e.DataInvoise >= FromDate && e.DataInvoise <= ToDate));
            }
            foreach (InvoiseControl invoiseControl in AllMovementDebit)
            {
                var item = new AccItemSaldo();
                item.NInvoise       = invoiseControl.NInvoise;
                item.NameContragent = invoiseControl.NameContragent;
                item.Code           = invoiseControl.CodeContragent;
                item.Od             = invoiseControl.Oborot;
                item.Type           = accountsModel.TypeAccount;
                item.Folder         = invoiseControl.Folder;
                item.DocNumber      = invoiseControl.DocNumber;
                item.Reason         = invoiseControl.Reason;
                item.Pr1            = invoiseControl.Pr1;
                item.Pr2            = invoiseControl.Pr2;

                if (item.Type == 1)
                {
                    item.Data = invoiseControl.DataInvoise;
                }
                var lc = AllMovementCredit.FirstOrDefault(
                    w => w.CodeContragent == invoiseControl.CodeContragent && w.NInvoise == invoiseControl.NInvoise);
                if (lc != null)
                {
                    item.Oc += lc.Oborot;
                    if (item.Type == 2)
                    {
                        item.Data = lc.DataInvoise;
                    }
                    AllMovementCredit.Remove(lc);
                }
                _movements1.Add(item);
            }
            foreach (InvoiseControl invoiseControl in AllMovementCredit)
            {
                var item = new AccItemSaldo();
                item.NInvoise       = invoiseControl.NInvoise;
                item.NameContragent = invoiseControl.NameContragent;
                item.Code           = invoiseControl.CodeContragent;
                item.Oc             = invoiseControl.Oborot;
                item.Type           = accountsModel.TypeAccount;
                item.Data           = invoiseControl.DataInvoise;
                item.Folder         = invoiseControl.Folder;
                item.DocNumber      = invoiseControl.DocNumber;
                item.Reason         = invoiseControl.Reason;
                item.Pr1            = invoiseControl.Pr1;
                item.Pr2            = invoiseControl.Pr2;
                _movements1.Add(item);
            }
            foreach (AccItemSaldo accItemSaldo in _movements1)
            {
                var saldo =
                    rezi.FirstOrDefault(
                        m => m.Code == accItemSaldo.Code && m.NumInvoise == accItemSaldo.NInvoise);
                if (saldo != null)
                {
                    accItemSaldo.Nsd = saldo.BeginSaldoDebit;
                    accItemSaldo.Nsc = saldo.BeginSaldoCredit;
                    rezi.Remove(saldo);
                }
            }
            foreach (var item in rezi.OrderBy(e => e.Code))
            {
                var item1 = new AccItemSaldo();
                item1.NInvoise       = item.NumInvoise;
                item1.NameContragent = item.NameContragent;
                item1.Data           = item.Date;
                item1.Code           = item.Code;
                item1.Od             = 0;
                item1.Nsd            = item.BeginSaldoDebit;
                item1.Nsc            = item.BeginSaldoCredit;
                item1.Type           = accountsModel.TypeAccount;
                _movements1.Add(item1);
            }

            foreach (InvoiseControl invoiseControl in AllMovementDebit1)
            {
                var item = new AccItemSaldo();
                item.NInvoise       = invoiseControl.NInvoise;
                item.NameContragent = invoiseControl.NameContragent;
                item.Code           = invoiseControl.CodeContragent;
                item.Od             = invoiseControl.Oborot;
                item.Type           = accountsModel.TypeAccount;
                item.Folder         = invoiseControl.Folder;
                item.DocNumber      = invoiseControl.DocNumber;
                item.Reason         = invoiseControl.Reason;
                item.Pr1            = invoiseControl.Pr1;
                item.Pr2            = invoiseControl.Pr2;
                item.Data           = invoiseControl.DataInvoise;
                //if (item.Type == 1)
                //var lc = AllMovementCredit1.FirstOrDefault(
                //        w => w.CodeContragent == invoiseControl.CodeContragent && w.NInvoise == invoiseControl.NInvoise);
                //if (lc != null)
                //{

                //    item.Oc += lc.Oborot;
                //    if (item.Type == 2) item.Data = lc.DataInvoise;
                //    AllMovementCredit1.Remove(lc);
                //}
                _movements.Add(item);
            }
            foreach (InvoiseControl invoiseControl in AllMovementCredit1)
            {
                var item = new AccItemSaldo();
                item.NInvoise       = invoiseControl.NInvoise;
                item.NameContragent = invoiseControl.NameContragent;
                item.Code           = invoiseControl.CodeContragent;
                item.Oc             = invoiseControl.Oborot;
                item.Type           = accountsModel.TypeAccount;
                item.Data           = invoiseControl.DataInvoise;
                item.Folder         = invoiseControl.Folder;
                item.DocNumber      = invoiseControl.DocNumber;
                item.Reason         = invoiseControl.Reason;
                item.Pr1            = invoiseControl.Pr1;
                item.Pr2            = invoiseControl.Pr2;
                _movements.Add(item);
            }
            foreach (AccItemSaldo accItemSaldo in _movements)
            {
                var saldo =
                    _movements1.FirstOrDefault(
                        m => m.Code == accItemSaldo.Code && m.DocNumber == accItemSaldo.NInvoise);
                if (saldo != null)
                {
                    accItemSaldo.Nsd = saldo.Ksd;
                    accItemSaldo.Nsc = saldo.Ksc;
                    _movements1.Remove(saldo);
                }
            }
            foreach (var item in _movements1.OrderBy(e => e.Code))
            {
                var item1 = new AccItemSaldo();
                item1.NInvoise       = item.NInvoise;
                item1.NameContragent = item.NameContragent;
                item1.Code           = item.Code;
                item1.Od             = 0;
                item1.Nsd            = item.Ksd;
                item1.Nsc            = item.Ksc;
                item1.Type           = accountsModel.TypeAccount;
                item1.Data           = item.Data;
                _movements.Add(item1);
            }
            //AccSaldo = Context.GetSaldoAcc(accountsModel.Id);
            //Period = string.Format("От дата {0} до дата {1}",
            //                       new DateTime(ConfigTempoSinglenton.GetInstance().WorkDate.Year,
            //                                    1, 1).ToShortDateString(),
            //                       new DateTime(ConfigTempoSinglenton.GetInstance().WorkDate.Year,
            //                                    1, 1).AddYears(1).AddDays(-1).ToShortDateString());
            //AccInfo = accountsModel.ShortName;
            //AllMovement = new ObservableCollection<AccItemSaldo>(_movements);
            //}
            if (typerep == 1 && filter != null)
            {
                string contr = "";
                var    filt  = filter.Split('|');
                if (filt.Length > 0)
                {
                    contr      = filt[1].Trim();
                    _movements = new List <AccItemSaldo>(_movements.Where(w => w.Code == contr));
                }
            }
            string name       = "";
            string code       = "";
            string numinvoice = "";
            string folder     = "";
            string reason     = "";
            string docnum     = "";
            string pr1        = "";
            string pr2        = "";
            bool   first      = true;

            decimal sumansc  = 0;
            decimal sumaOc   = 0;
            decimal sumansd  = 0;
            decimal sumaOd   = 0;
            decimal sumansct = 0;
            decimal sumaOct  = 0;
            decimal sumansdt = 0;
            decimal sumaOdt  = 0;

            foreach (AccItemSaldo itemSaldo in _movements.OrderBy(m => m.Cod).ThenBy(m => m.NInvoise))
            {
                List <string> row = new List <string>();
                if (first)
                {
                    name       = itemSaldo.NameContragent;
                    code       = itemSaldo.Code;
                    numinvoice = itemSaldo.NInvoise;
                    first      = false;
                    folder     = itemSaldo.Folder;
                    reason     = itemSaldo.Reason;
                    docnum     = itemSaldo.DocNumber;
                    pr1        = itemSaldo.Pr1;
                    pr2        = itemSaldo.Pr2;
                }
                else
                {
                    if (code != itemSaldo.Code && WithContragentSum)//|| numinvoice !=itemSaldo.NInvoise
                    {
                        if (!OnlyContragent)
                        {
                            NewRow(items);
                        }
                        List <string> rowTotal = new List <string>();
                        if (!OnlyContragent)
                        {
                            rowTotal.Add("");
                            rowTotal.Add("");
                            //rowTotal.Add("");
                        }
                        else
                        {
                            rowTotal.Add(code);
                            rowTotal.Add(name);
                            rowTotal.Add(numinvoice);
                        }
                        rowTotal.Add("");
                        rowTotal.Add(" Общо :");
                        //row.Add(itemSaldo.Nsd.ToString(Vf.LevFormatUI));
                        if (accountsModel.TypeAccount != 1)
                        {
                            var ks = sumansc + sumaOc - sumansd - sumaOd;
                            var ns = sumansc - sumansd;
                            rowTotal.Add(ns.ToString(Vf.LevFormatUI));
                            rowTotal.Add(sumaOd.ToString(Vf.LevFormatUI));
                            rowTotal.Add(sumaOc.ToString(Vf.LevFormatUI));
                            rowTotal.Add(ks.ToString(Vf.LevFormatUI));
                        }
                        else
                        {
                            var ks = sumansd + sumaOd - sumansc - sumaOc;
                            var ns = sumansd - sumansc;
                            rowTotal.Add(ns.ToString(Vf.LevFormatUI));
                            rowTotal.Add(sumaOd.ToString(Vf.LevFormatUI));
                            rowTotal.Add(sumaOc.ToString(Vf.LevFormatUI));
                            rowTotal.Add(ks.ToString(Vf.LevFormatUI));
                        }
                        if (!OnlyContragent)
                        {
                            rowTotal.Add("");
                            rowTotal.Add("");
                            rowTotal.Add("");
                            rowTotal.Add("");
                            rowTotal.Add("");
                        }
                        else
                        {
                            rowTotal.Add(folder);
                            rowTotal.Add(docnum);
                            rowTotal.Add(reason);
                            rowTotal.Add(pr1);
                            rowTotal.Add(pr2);
                        }
                        items.Add(rowTotal);
                        if (!OnlyContragent)
                        {
                            NewRow(items);
                        }
                        sumansc    = 0;
                        sumansd    = 0;
                        sumaOc     = 0;
                        sumaOd     = 0;
                        name       = itemSaldo.NameContragent;
                        code       = itemSaldo.Code;
                        numinvoice = itemSaldo.NInvoise;
                        folder     = itemSaldo.Folder;
                        reason     = itemSaldo.Reason;
                        docnum     = itemSaldo.DocNumber;
                        pr1        = itemSaldo.Pr1;
                        pr2        = itemSaldo.Pr2;
                    }
                }

                sumansc  += itemSaldo.Nsc;
                sumansd  += itemSaldo.Nsd;
                sumaOc   += itemSaldo.Oc;
                sumaOd   += itemSaldo.Od;
                sumansct += itemSaldo.Nsc;
                sumansdt += itemSaldo.Nsd;
                sumaOct  += itemSaldo.Oc;
                sumaOdt  += itemSaldo.Od;
                //row.Add(itemSaldo.Nsd.ToString(Vf.LevFormatUI));
                if (accountsModel.TypeAccount != 1)
                {
                    itemSaldo.Ks = itemSaldo.Nsc + itemSaldo.Oc - itemSaldo.Nsd - itemSaldo.Od;
                    itemSaldo.Ns = itemSaldo.Nsc - itemSaldo.Nsd;
                }
                else
                {
                    itemSaldo.Ks = itemSaldo.Nsd + itemSaldo.Od - itemSaldo.Nsc - itemSaldo.Oc;
                    itemSaldo.Ns = itemSaldo.Nsd - itemSaldo.Nsc;
                }
                if (!OnlyContragent)
                {
                    row.Add(itemSaldo.Code);
                    row.Add(itemSaldo.NameContragent);
                    row.Add(itemSaldo.NInvoise);
                    row.Add(string.Format("{0}.{1}.{2}", itemSaldo.Data.Day.ToZeroString(2), itemSaldo.Data.Month.ToZeroString(2), itemSaldo.Data.Year.ToZeroString(4)));
                    row.Add(itemSaldo.Ns.ToString(Vf.LevFormatUI));
                    row.Add(itemSaldo.Od.ToString(Vf.LevFormatUI));
                    row.Add(itemSaldo.Oc.ToString(Vf.LevFormatUI));
                    row.Add(itemSaldo.Ks.ToString(Vf.LevFormatUI));
                    row.Add(itemSaldo.Folder);
                    row.Add(itemSaldo.DocNumber);
                    row.Add(itemSaldo.Reason);
                    row.Add(itemSaldo.Pr1);
                    row.Add(itemSaldo.Pr2);
                    items.Add(row);
                }
                //row.Add(itemSaldo.Ksc.ToString(Vf.LevFormatUI));
            }
            if (WithContragentSum)
            {
                if (!OnlyContragent)
                {
                    NewRow(items);
                }
                List <string> rowTotalLas = new List <string>();
                if (!OnlyContragent)
                {
                    rowTotalLas.Add("");
                    rowTotalLas.Add("");
                }
                else
                {
                    rowTotalLas.Add(code);
                    rowTotalLas.Add(name);
                    rowTotalLas.Add(numinvoice);
                }
                rowTotalLas.Add("");
                rowTotalLas.Add(" Общо :");
                //row.Add(itemSaldo.Nsd.ToString(Vf.LevFormatUI));
                if (accountsModel.TypeAccount != 1)
                {
                    var ks = sumansc + sumaOc - sumansd - sumaOd;
                    var ns = sumansc - sumansd;
                    rowTotalLas.Add(ns.ToString(Vf.LevFormatUI));
                    rowTotalLas.Add(sumaOd.ToString(Vf.LevFormatUI));
                    rowTotalLas.Add(sumaOc.ToString(Vf.LevFormatUI));
                    rowTotalLas.Add(ks.ToString(Vf.LevFormatUI));
                    rowTotalLas.Add(folder);
                    rowTotalLas.Add(docnum);
                    rowTotalLas.Add(reason);
                    rowTotalLas.Add(pr1);
                    rowTotalLas.Add(pr2);
                }
                else
                {
                    var ks = sumansd + sumaOd - sumansc - sumaOc;
                    var ns = sumansd - sumansc;
                    rowTotalLas.Add(ns.ToString(Vf.LevFormatUI));
                    rowTotalLas.Add(sumaOd.ToString(Vf.LevFormatUI));
                    rowTotalLas.Add(sumaOc.ToString(Vf.LevFormatUI));
                    rowTotalLas.Add(ks.ToString(Vf.LevFormatUI));
                }
                if (!OnlyContragent)
                {
                    rowTotalLas.Add("");
                    rowTotalLas.Add("");
                    rowTotalLas.Add("");
                    rowTotalLas.Add("");
                    rowTotalLas.Add("");
                }
                else
                {
                    rowTotalLas.Add(folder);
                    rowTotalLas.Add(docnum);
                    rowTotalLas.Add(reason);
                    rowTotalLas.Add(pr1);
                    rowTotalLas.Add(pr2);
                }
                items.Add(rowTotalLas);
            }
            if (filter == null)
            {
                NewRow(items);
                List <string> rowTotalLast = new List <string>();
                rowTotalLast.Add("");
                rowTotalLast.Add("");
                rowTotalLast.Add("");
                rowTotalLast.Add(" Общо :");
                //row.Add(itemSaldo.Nsd.ToString(Vf.LevFormatUI));
                if (accountsModel.TypeAccount != 1)
                {
                    var ks = sumansct + sumaOct - (sumansdt + sumaOdt);
                    var ns = sumansct - (sumansdt);
                    rowTotalLast.Add(ns.ToString(Vf.LevFormatUI));
                    rowTotalLast.Add(sumaOdt.ToString(Vf.LevFormatUI));
                    rowTotalLast.Add(sumaOct.ToString(Vf.LevFormatUI));
                    rowTotalLast.Add(ks.ToString(Vf.LevFormatUI));
                }
                else
                {
                    var ks = sumansdt + sumaOdt - (sumansct + sumaOct);
                    var ns = sumansdt - (sumansct);
                    rowTotalLast.Add(ns.ToString(Vf.LevFormatUI));
                    rowTotalLast.Add(sumaOdt.ToString(Vf.LevFormatUI));
                    rowTotalLast.Add(sumaOct.ToString(Vf.LevFormatUI));
                    rowTotalLast.Add(ks.ToString(Vf.LevFormatUI));
                }
                items.Add(rowTotalLast);
            }
            return(items);
        }
Example #4
0
        internal static IEnumerable <IEnumerable <string> > GetDetailsContoToAccEx(int id, int typ, string filter)
        {
            List <AccItemSaldo>   rez    = new List <AccItemSaldo>();
            List <List <string> > rez1   = new List <List <string> >();
            List <string>         titles = new List <string>();
            var dbman = new DBManager(DataProvider.Firebird);

            dbman.ConnectionString = Entrence.ConnectionString;
            try
            {
                string s =
                    string.Format(
                        "SELECT c.\"Id\",c.\"Oborot\",c.\"Date\",m.LOOKUPFIELDKEY,m.LOOKUPID,m.\"VALUE\",lf.\"Name\",m.VALUEDATE,c.\"DebitAccount\",m.LOOKUPVAL FROM \"conto\" c inner join CONTOMOVEMENT m on m.CONTOID=c.\"Id\"inner join \"lookupsfield\" lf on m.ACCFIELDKEY=lf.\"Id\" where (c.\"FirmId\"={0} and c.\"Date\">='1.1.{1}' and c.\"Date\"<='31.12.{1}' and m.ACCID={2}) order by c.\"Id\",m.SORTORDER",
                        ConfigTempoSinglenton.GetInstance().CurrentFirma.Id,
                        ConfigTempoSinglenton.GetInstance().WorkDate.Year, id);
                dbman.Open();
                dbman.ExecuteReader(CommandType.Text, s);
                string command =
                    string.Format("SELECT count(ca.\"AnaliticalNameID\") " +
                                  " FROM \"accounts\" a " +
                                  "inner join \"analiticalaccount\" aa on a.\"AnaliticalNum\"=aa.\"Id\"" +
                                  "inner join \"analiticalaccounttype\" aat on aa.\"TypeID\"=aat.\"Id\"" +
                                  "inner join \"conectoranaliticfield\" ca on aa.\"Id\"=ca.\"AnaliticalNameID\"" +
                                  "inner join \"lookupsfield\" af on af.\"Id\"=ca.\"AnaliticalFieldId\" " +
                                  "left outer join MAPACCTOLOOKUP l on l.ACCOUNTS_ID=a.\"Id\" and l.ANALITIC_ID=aa.\"Id\" and l.ANALITIC_FIELD_ID=ca.\"AnaliticalFieldId\"" +
                                  " where a.\"Id\"={0}", id);
                int          count    = (int)dbman.ExecuteScalar(CommandType.Text, command);
                bool         change   = false;
                bool         first    = true;
                bool         firstrow = true;
                bool         ima      = false;
                AccItemSaldo row      = new AccItemSaldo();
                row.Type = typ;
                int oldid = 0, newid = 0;
                int chikiriki = 0;
                while (dbman.DataReader.Read())
                {
                    ima   = true;
                    newid = int.Parse(dbman.DataReader["Id"].ToString());
                    if (first)
                    {
                        first = false;
                        oldid = newid;
                        int smetka = 0;
                        if (int.TryParse(dbman.DataReader["DebitAccount"].ToString(), out smetka))
                        {
                            if (smetka == id)
                            {
                                row.IsDebit = true;
                                row.Type    = typ;
                                row.Od      = decimal.Parse(dbman.DataReader["Oborot"].ToString());
                            }
                            else
                            {
                                row.Type = typ;
                                row.Oc   = decimal.Parse(dbman.DataReader["Oborot"].ToString());
                            }
                        }
                    }
                    if (oldid != newid)
                    {
                        change = true;
                    }
                    if (change)
                    {
                        if (firstrow)
                        {
                            firstrow = false;
                        }
                        rez.Add(row);
                        row    = new AccItemSaldo();
                        oldid  = newid;
                        change = false;
                        int smetka;
                        if (int.TryParse(dbman.DataReader["DebitAccount"].ToString(), out smetka))
                        {
                            if (smetka == id)
                            {
                                row.IsDebit = true;
                                row.Type    = typ;
                                row.Od      = decimal.Parse(dbman.DataReader["Oborot"].ToString());
                            }
                            else
                            {
                                row.Type = typ;
                                row.Oc   = decimal.Parse(dbman.DataReader["Oborot"].ToString());
                            }
                        }
                        chikiriki = 0;
                    }

                    if (chikiriki < count)
                    {
                        string value  = dbman.DataReader["VALUE"].ToString();
                        string lvalue = dbman.DataReader["LOOKUPVAL"].ToString();
                        string name   = dbman.DataReader["Name"].ToString();
                        row.Details = string.Format("{0}|{1} ", row.Details, value);
                        if (!String.IsNullOrWhiteSpace(lvalue) && !name.Contains("Дата "))
                        {
                            row.Details = string.Format("{0}|{1} ", row.Details, lvalue);
                        }
                        if (firstrow)
                        {
                            titles.Add(name);
                        }
                        chikiriki++;
                    }
                }
                if (ima)
                {
                    rez.Add(row);
                }
                else
                {
                    return(null);
                }
            }
            catch (Exception ex)
            {
                Logger.Instance().WriteLogError(ex.Message, "internal static IEnumerable<IEnumerable<string>> GetDetailsContoToAcc(int id,int typ,string filter)");
                dbman.RollBackTransaction();
            }


            finally
            {
                dbman.Dispose();
            }
            titles.Add("НС");
            titles.Add("ОД");
            titles.Add("ОК");
            titles.Add("КС");
            rez1.Add(titles);
            var query = (from t in rez
                         group t by new { t.Details, t.Type }
                         into grp
                         select new AccItemSaldo
            {
                Details = grp.Key.Details,
                Type = grp.Key.Type,
                //Nsc=grp.Sum(t => t.Nsc),
                //Nsd = grp.Sum(t => t.Nsc),
                Oc = grp.Sum(t => t.Oc),
                Od = grp.Sum(t => t.Od),
                //Ksd = grp.Sum(t => t.Ksd),
                //Ksc = grp.Sum(t => t.Ksc),
            }).ToList();
            //
            var rezi = GetAllAnaliticSaldos(id, Entrence.CurrentFirma.Id);

            foreach (AccItemSaldo accItemSaldo in query)
            {
                var saldo =
                    rezi.FirstOrDefault(
                        m => m.NameContragent == accItemSaldo.NameContragent && m.NumInvoise == accItemSaldo.NInvoise);
                if (saldo != null)
                {
                    accItemSaldo.Nsd = saldo.BeginSaldoDebit;
                    accItemSaldo.Nsc = saldo.BeginSaldoCredit;
                }
            }
            //foreach (var items in rezi)
            //{
            //    var saldo =
            //       query.FirstOrDefault(
            //           m => m.Details == items.Details);
            //    if (saldo == null)
            //    {
            //        var item = new AccItemSaldo();
            //        item.NInvoise = items.NumInvoise;
            //        item.NameContragent = items.NameContragent;
            //        item.Nsc = items.BeginSaldoCredit;
            //        item.Nsd = items.BeginSaldoDebit;
            //        item.Data = items.Date.ToShortDateString();
            //        item.Type = typ;
            //        item.Details = items.Details;
            //        query.Add(item);
            //    }
            //}
            if (!string.IsNullOrWhiteSpace(filter))
            {
                foreach (var item in query.Where(e => e.Details != null && e.Details.StartsWith(filter)).OrderBy(e => e.Details))
                {
                    var           det    = item.Details.Split('|');
                    List <string> newrow = det.Skip(1).ToList();
                    decimal       saldo  = 0;
                    if (item.Type == 1)
                    {
                        saldo = item.Nsd - item.Nsc;
                    }
                    else
                    {
                        saldo = item.Nsc - item.Nsd;
                    }
                    newrow.Add(saldo.ToString(Vf.LevFormatUI));
                    newrow.Add(item.Od.ToString(Vf.LevFormatUI));
                    newrow.Add(item.Oc.ToString(Vf.LevFormatUI));
                    decimal ksaldo = 0;
                    if (item.Type == 1)
                    {
                        ksaldo = item.Nsd + item.Od - item.Nsc - item.Oc;
                    }
                    else
                    {
                        ksaldo = item.Nsc + item.Oc - item.Nsd - item.Od;
                    }
                    newrow.Add(ksaldo.ToString(Vf.LevFormatUI));
                    rez1.Add(newrow);
                }
            }
            else
            {
                foreach (var item in query.OrderBy(e => e.Details))
                {
                    if (item.Details != null)
                    {
                        var           det    = item.Details.Split('|');
                        List <string> newrow = det.Skip(1).ToList();
                        decimal       saldo  = 0;
                        if (item.Type == 1)
                        {
                            saldo = item.Nsd - item.Nsc;
                        }
                        else
                        {
                            saldo = item.Nsc - item.Nsd;
                        }
                        newrow.Add(saldo.ToString(Vf.LevFormatUI));
                        newrow.Add(item.Od.ToString(Vf.LevFormatUI));
                        newrow.Add(item.Oc.ToString(Vf.LevFormatUI));
                        decimal ksaldo = 0;
                        if (item.Type == 1)
                        {
                            ksaldo = item.Nsd + item.Od - item.Nsc - item.Oc;
                        }
                        else
                        {
                            ksaldo = item.Nsc + item.Oc - item.Nsd - item.Od;
                        }
                        newrow.Add(ksaldo.ToString(Vf.LevFormatUI));
                        rez1.Add(newrow);
                    }
                }
            }
            return(rez1);
        }