Ejemplo n.º 1
0
        private async Task HareketleriYukle()
        {
            Dictionary<string, string> WhereClauses = new Dictionary<string, string>();
            if (cb2.Checked)
                WhereClauses["IslemTarihi"] = $"(IslemTarihi BETWEEN '{dateTimePicker3.Value.ToString("yyyy-MM-dd")}' AND '{dateTimePicker4.Value.ToString("yyyy-MM-dd")}' )";

            List<int> fFP;
            fFP = new List<int>();
            await Task.Factory.StartNew(() =>
            {

                var fid = Convert.ToInt32(FirmaGruplari.SelectedNode.Name);
                fFP = FirmaYukleyici.GetGroupItems(fid).Select(r => r.Id).ToList();
                if (!fFP.Any()) fFP.Add(fid);

            }, CancellationToken.None, TaskCreationOptions.None, tsch).ConfigureAwait(true);
            WhereClauses["Firma"] = $"((AlacakliFirma in ({string.Join(",", fFP)})) OR (BorcluFirma in ({string.Join(",", fFP)})))";
            var sqlQuery = $"SELECT * FROM Hareketler {(WhereClauses.Any() ? $" WHERE {string.Join(" AND ", WhereClauses.Values)}" : string.Empty)}";
            var sqlQueryDevirAlacak = $@"SELECT Cast(10000000+Row_Number() over (order by AlacakliFirma) as int) Id, AlacakliFirma, 0 BorcluFirma, 0 GelirGiderTuru
                                       ,0 Muavin,0 Kaynak ,Cast('2000-01-01' as Date) Donem, Cast('{dateTimePicker3.Value.AddDays(-1).ToString("yyyy-MM-dd")}' as Date) IslemTarihi
                                        ,Cast('2000-01-01' as Date) VadeTarihi, IsNull(Cast(SUM(Tutar) as Decimal(18,2)),0) Tutar
                                        ,IsNull(Cast(SUM(KdvMatrah) as Decimal(18,2)),0) KdvMatrah, null Aciklama FROM Hareketler 
                                           WHERE {$" IslemTarihi < '{(!cb2.Checked ? "1900-01-01" : dateTimePicker3.Value.ToString("yyyy-MM-dd"))}' AND": string.Empty} 
                                           (AlacakliFirma in ({string.Join(",", fFP)}))
                                        GROUP BY AlacakliFirma";
            var sqlQueryDevirBorc = $@"SELECT Cast(20000000+Row_Number() over (order by BorcluFirma) as int) Id, 0 AlacakliFirma, BorcluFirma, 0 GelirGiderTuru
                                        ,0 Muavin,0 Kaynak,Cast('2000-01-01' as Date) Donem, Cast('{dateTimePicker3.Value.AddDays(-1).ToString("yyyy-MM-dd")}' as Date) IslemTarihi
                                        ,Cast('2000-01-01' as Date) VadeTarihi, IsNull(Cast(SUM(Tutar) as Decimal(18,2)),0) Tutar
                                        ,IsNull(Cast(SUM(KdvMatrah) as Decimal(18,2)),0) KdvMatrah, null Aciklama FROM Hareketler 
                                           WHERE {$" IslemTarihi < '{(!cb2.Checked ? "1900-01-01" : dateTimePicker3.Value.ToString("yyyy-MM-dd"))}' AND": string.Empty} 
                                           (BorcluFirma in ({string.Join(",", fFP)}))
                                        GROUP BY BorcluFirma";
            using (var db1 = new kocEntities())
            using (var db2 = new kocEntities())
            using (var db3 = new kocEntities())
            {
                db1.Configuration.LazyLoadingEnabled = false;
                db1.Configuration.ProxyCreationEnabled = false;
                db2.Configuration.LazyLoadingEnabled = false;
                db2.Configuration.ProxyCreationEnabled = false;
                db3.Configuration.LazyLoadingEnabled = false;
                db3.Configuration.ProxyCreationEnabled = false;

                await Task.WhenAll<List<Hareketler>>(new Task<List<Hareketler>>[] {
                db1.Hareketler.SqlQuery(sqlQuery, new object[] { }).ToListAsync(),
                db2.Hareketler.SqlQuery(sqlQueryDevirAlacak, new object[] { }).ToListAsync(),
                db3.Hareketler.SqlQuery(sqlQueryDevirBorc, new object[] { }).ToListAsync()
                }).ContinueWith((t) =>
                {
                    var hareketListesi = t.Result[0];
                    var DevirAlacakTutar = t.Result[1];
                    var DevirBorcTutar = t.Result[2];
                    toolStripStatusLabel1.Text = $"Toplam Bakiye: Hesaplanıyor...";
                    firmaCarileriBindingSource.SuspendBinding();
                    var firmadevir = (from da in DevirAlacakTutar
                                      join db in DevirBorcTutar
                                      on da.AlacakliFirma equals db.BorcluFirma
                                      into temp
                                      from db in temp.DefaultIfEmpty(new Hareketler { AlacakliFirma = da.AlacakliFirma, Tutar = 0 })
                                      select new FirmaDevirTutar { firmaId = da.AlacakliFirma, alacak = da.Tutar, borc = db.Tutar, bakiye = da.Tutar - db.Tutar })
                            .Union(
                                from db in DevirBorcTutar
                                join da in DevirAlacakTutar
                                on db.BorcluFirma equals da.AlacakliFirma
                                into temp
                                from da in temp.DefaultIfEmpty(new Hareketler { BorcluFirma = db.BorcluFirma, Tutar = 0 })
                                select new FirmaDevirTutar { firmaId = db.BorcluFirma, alacak = da.Tutar, borc = db.Tutar, bakiye = da.Tutar - db.Tutar }
                            , new FirmaDevirTutarComparer()).ToList();
                    var firmaDevirBakiyeleri = firmadevir.ToDictionary(r => r.firmaId, r => r);
                    var devircarileri = firmaDevirBakiyeleri.Values.Where(fdb => TabloYukleyici<Firmalar>.AllData.ContainsKey(fdb.firmaId)).Select(fdb =>
                    {
                        return new FirmaCarileri
                        {
                            Aciklama = $" {dateTimePicker3.Value} Öncesi Devir Bakiyesi",
                            Alacak = fdb.alacak,
                            Bakiye = fdb.bakiye,
                            Borc = fdb.borc,
                            IslemTarihi = dateTimePicker3.Value.AddDays(-1),
                            FirmaAdi = TabloYukleyici<Firmalar>.AllData[fdb.firmaId].Etiket,
                            GelirGiderTurAdi = "DEVİR BAKİYESİ",
                            FirmaId = fdb.firmaId,
                            GelirGiderTuru = -2,
                            Id = 0
                        };
                    }).ToList();
                    var ds = new List<FirmaCarileri>(devircarileri);
                    foreach (var item in hareketListesi.OrderBy(hl => hl.IslemTarihi))
                    {
                        var b = FirmaGruplari.SelectedNode.Name == item.AlacakliFirma.ToString() ||
                        FirmaGruplari.SelectedNode.Nodes.Find(item.AlacakliFirma.ToString(), true).Any();
                        var firmaId = b ? item.AlacakliFirma : item.BorcluFirma;
                        var firmaAdi = TabloYukleyici<Firmalar>.AllData.ContainsKey(firmaId) ? TabloYukleyici<Firmalar>.AllData[firmaId].Etiket : "Bilinmeyen Firma";
                        var record = new FirmaCarileri
                        {
                            Id = item.Id,
                            IslemTarihi = item.IslemTarihi,
                            FirmaId = firmaId,
                            GelirGiderTuru = item.GelirGiderTuru,
                            Borc = b ? 0 : item.Tutar,
                            Alacak = b ? item.Tutar : 0,
                            Aciklama = item.Aciklama,
                            FirmaAdi = firmaAdi,
                            GelirGiderTurAdi =
                                item.GelirGiderTuru == -1 ? // Virman
                                "VİRMAN" :
                                (
                                    item.GelirGiderTuru == 0 ? //Ödeme & Tahsilat
                                    (
                                        FirmaGruplari.SelectedNode.FullPath.Contains("KOÇ GRUP") ?
                                        (b ? "ÖDEME" : "TAHSİLAT") :
                                        (b ? "TAHSİLAT" : "ÖDEME")
                                    ) :
                                    (  // Fatura Giriş Çıkışı
                                       TabloYukleyici<GelirGiderTurleri>.AllData[item.GelirGiderTuru].Etiket
                                    )
                                )
                        };
                        if (!firmaDevirBakiyeleri.ContainsKey(record.FirmaId))
                            firmaDevirBakiyeleri[record.FirmaId] = new FirmaDevirTutar
                            {
                                bakiye = 0,
                                firmaId = record.FirmaId
                            };
                        firmaDevirBakiyeleri[record.FirmaId].bakiye += (record.Alacak - record.Borc);
                        record.Bakiye = firmaDevirBakiyeleri[record.FirmaId].bakiye;
                        ds.Add(record);
                    }
                    if (groupResults.Checked)
                    {
                        hareketlerDataGridView.Columns[2].Visible = hareketlerDataGridView.Columns[3].Visible = hareketlerDataGridView.Columns[4].Visible =
                        hareketlerDataGridView.Columns[5].Visible = hareketlerDataGridView.Columns[7].Visible = false;
                        var id = 1;
                        firmaCarileriBindingSource.DataSource = new BindingList<FirmaCarileri>(
                            ds.GroupBy(r =>
                            {
                                foreach (TreeNode node in FirmaGruplari.SelectedNode.Nodes)
                                {
                                    if (node.Name == r.FirmaId.ToString() || node.Nodes.Find(r.FirmaId.ToString(), true).Any()) return node;
                                }
                                return null;
                            }, (g, r) => new FirmaCarileri
                            {
                                Id = id++,
                                FirmaAdi = (g ?? FirmaGruplari.SelectedNode).Text,
                                Bakiye = (r.Sum(rr => rr.Alacak) - r.Sum(rr => rr.Borc)),
                                FirmaId = Convert.ToInt32((g ?? FirmaGruplari.SelectedNode).Name)
                            }).OrderBy(r => r.FirmaAdi).ToList()
                        );
                    }
                    else
                    {
                        hareketlerDataGridView.Columns[2].Visible = hareketlerDataGridView.Columns[3].Visible = hareketlerDataGridView.Columns[4].Visible =
                        hareketlerDataGridView.Columns[5].Visible = hareketlerDataGridView.Columns[7].Visible = true;
                        firmaCarileriBindingSource.DataSource = new BindingList<FirmaCarileri>(ds.OrderBy(d => d.FirmaAdi).ThenBy(d => d.IslemTarihi).ToList());
                    }
                    toolStripStatusLabel1.Text = $"Toplam Bakiye: {ds.Sum(r=>r.Alacak-r.Borc).ToString("C0", CultureInfo.GetCultureInfo("tr-TR"))}";
                    firmaCarileriBindingSource.ResumeBinding();
                }, CancellationToken.None, TaskContinuationOptions.None, tsch)
                .ConfigureAwait(true);
            }
        }
Ejemplo n.º 2
0
        private async Task HareketleriYukle()
        {
            Dictionary<string, string> WhereClauses = new Dictionary<string, string>();
            var startDate = dateTimePicker3.Value.AddDays(1 - dateTimePicker3.Value.Day);
            var endDate = dateTimePicker4.Value.AddMonths(1);
            endDate = endDate.AddDays(-endDate.Day);
            if (cb2.Checked)
                WhereClauses["IslemTarihi"] = $"({(it.Checked ? "IslemTarihi" : (yt.Checked ? "Donem" : "VadeTarihi"))} BETWEEN '{startDate.ToString("yyyy-MM-dd")}' AND '{endDate.ToString("yyyy-MM-dd")}' )";

            List<int> gelirgidergruplari, firmagruplari;
            string gelirgider = "";
            gelirgidergruplari = firmagruplari = new List<int>();
            await Task.Factory.StartNew(() =>
            {
                var fid = Convert.ToInt32(FirmaGruplari.SelectedNode.Name);
                firmagruplari = FirmaYukleyici.GetGroupItems(fid).Select(r => r.Id).ToList();
                if (!firmagruplari.Any()) firmagruplari.Add(fid);

                var gid = Convert.ToInt32(GelirGiderGruplari.SelectedNode.Name);
                gelirgidergruplari = GGKYukleyici.GetGroupItems(gid).Select(r => r.Id).ToList();
                if (!gelirgidergruplari.Any()) gelirgidergruplari.Add(gid);

                gelirgider = (virmanlar || (GelirGiderGruplari.SelectedNode.Name == "1" || GelirGiderGruplari.Nodes[0].Nodes.Find(GelirGiderGruplari.SelectedNode.Name, true).Any())) ?
                "AlacakliFirma" : "BorcluFirma";

            }, CancellationToken.None, TaskCreationOptions.None, tsch).ConfigureAwait(true);
            if (!virmanlar) WhereClauses["GelirGiderTuru"] = $"(GelirGiderTuru in ({string.Join(",", gelirgidergruplari)}))";
            WhereClauses["Firma"] = $"({gelirgider} in ({string.Join(",", firmagruplari)}))";

            var sqlQuery = $"SELECT * FROM Hareketler {(WhereClauses.Any() ? $" WHERE {string.Join(" AND ", WhereClauses.Values)}" : string.Empty)}";
            using (var db1 = new kocEntities())
            {
                db1.Configuration.LazyLoadingEnabled = false;
                db1.Configuration.ProxyCreationEnabled = false;

                await Task.WhenAll<List<Hareketler>>(new Task<List<Hareketler>>[] {
                db1.Hareketler.SqlQuery(sqlQuery, new object[] { }).ToListAsync(),
                }).ContinueWith((t) =>
                {
                    var hareketListesi = t.Result[0];
                    var ds = new List<Hareketler>(hareketListesi);
                    List<ExpandoObject> pivotData;

                    var dsTable = new DataTable();
                    dsTable.Columns.Add("GelirGiderTürü");
                    var dsTotalTable = new DataTable();
                    dsTotalTable.Columns.Add("GelirGiderTürü");

                    if (groupResults.Checked)
                    {
                        TreeView tw = virmanlar ? FirmaGruplari : GelirGiderGruplari;
                        pivotData = ds.GroupBy(r =>
                        {
                            foreach (TreeNode node in tw.SelectedNode.Nodes)
                            {
                                if (virmanlar)
                                {
                                    if (node.Name == r.AlacakliFirma.ToString() || node.Nodes.Find(r.AlacakliFirma.ToString(), true).Any()) return node;
                                }
                                else {
                                    if (node.Name == r.GelirGiderTuru.ToString() || node.Nodes.Find(r.GelirGiderTuru.ToString(), true).Any()) return node;
                                }
                            }
                            return tw.SelectedNode.Nodes.Count == 0 ? tw.SelectedNode : null;

                        }, (g, r) =>
                        {
                            var record = new ExpandoObject();
                            var drecord = (IDictionary<string, object>)record;
                            drecord["GelirGiderTürü"] = (g == null) ? "Bilinmeyen Gelir Gider Türü" : g.Text;//g.Text;// 
                            foreach (var item in r.GroupBy(r1 =>
                            {
                                var tarih = it.Checked ? r1.IslemTarihi : (yt.Checked ? r1.Donem : r1.VadeTarihi);
                                return new { year = tarih.Year, month = tarih.Month };
                            },
                                (g1, r2) => new { year = g1.year, month = g1.month, total = r2.Sum(rr => rr.Tutar) }))
                            {
                                var s = $"{item.year}-{item.month.ToString("D2")}";
                                drecord[s] = item.total.ToString("N0");
                            }
                            return record;
                        }).ToList();
                    }
                    else
                    {
                        pivotData = ds.GroupBy(r => r.GelirGiderTurAdi, (g, r) =>
                        {
                            var record = new ExpandoObject();
                            var drecord = (IDictionary<string, object>)record;
                            drecord["GelirGiderTürü"] = g;
                            foreach (var item in r.GroupBy(r1 =>
                            {
                                var tarih = it.Checked ? r1.IslemTarihi : (yt.Checked ? r1.Donem : r1.VadeTarihi);
                                return new { year = tarih.Year, month = tarih.Month };
                            },
                                (g1, r2) => new { year = g1.year, month = g1.month, total = r2.Sum(rr => rr.Tutar) }))
                            {
                                var s = $"{item.year}-{item.month.ToString("D2")}";
                                drecord[s] = item.total.ToString("N0");
                            }
                            return record;
                        }).ToList();
                    }
                    var columns = pivotData.SelectMany(pc => ((IDictionary<string, object>)pc).Keys).Distinct().Except(new string[] { "GelirGiderTürü" }).ToList();
                    var oList = new Dictionary<string, object>();
                    oList.Add("GelirGiderTürü", "Genel Toplam");
                    foreach (var column in columns.OrderBy(c => c))
                    {
                        var d = DateTime.ParseExact(column + "-1", "yyyy-M-d", CultureInfo.InvariantCulture).ToString("MMM\\'yy", CultureInfo.CreateSpecificCulture("tr"));
                        dsTable.Columns.Add(d);
                        dsTotalTable.Columns.Add(d);
                        oList[d] = 0;
                    }
                    foreach (var data in pivotData)
                    {
                        var dataRow = dsTable.Rows.Add(((IDictionary<string, object>)data).Values.ToArray());
                        foreach (var column in columns.OrderBy(c => c))
                        {
                            var columnName = DateTime.ParseExact(column + "-1", "yyyy-M-d", CultureInfo.InvariantCulture).ToString("MMM\\'yy", CultureInfo.CreateSpecificCulture("tr"));
                            var ddata = (IDictionary<string, object>)data;
                            if (ddata.ContainsKey(column))
                            {
                                dataRow[columnName] = ddata[column];
                                oList[columnName] = Convert.ToDouble(oList[columnName]) + Convert.ToDouble(ddata[column]);
                            }
                            else
                            {
                                dataRow[columnName] = 0;
                            }
                        }
                    }
                    dsTotalTable.Rows.Add(oList.Values.Select(v => !(v is string) ? ((double)v).ToString("N0") : v).ToArray());
                    totalGrid.DataSource = dsTotalTable;
                    totalGrid.AutoGenerateColumns = false;
                    totalGrid.Columns.Clear();
                    totalGrid.AutoGenerateColumns = true;
                    hareketlerDataGridView.DataSource = dsTable;
                    hareketlerDataGridView.AutoGenerateColumns = false;
                    hareketlerDataGridView.Columns.Clear();
                    hareketlerDataGridView.AutoGenerateColumns = true;
                    for (int i = 1; i < hareketlerDataGridView.Columns.Count; i++)
                    {
                        hareketlerDataGridView.Columns[i].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
                        totalGrid.Columns[i].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
                    }

                }, CancellationToken.None, TaskContinuationOptions.None, tsch)
                .ConfigureAwait(true);
            }
        }