public JsonResult Summary(frmTransferMalzemeApprove tbl)
        {
            if (CheckPerm(Perms.Transfer, PermTypes.Writing) == false)
            {
                return(Json(new Result(false, "Yetkiniz yok."), JsonRequestBehavior.AllowGet));
            }
            if (tbl.GirisDepo == "" || tbl.AraDepo == "" || tbl.CikisDepo == "" || tbl.MalKodus.Count() == 0 || tbl.Birims.Count() == 0 || tbl.Miktar.Count() == 0)
            {
                return(Json(new Result(false, "Eksik bilgi girdiniz."), JsonRequestBehavior.AllowGet));
            }
            if (tbl.GirisDepo == tbl.AraDepo || tbl.CikisDepo == tbl.AraDepo || tbl.CikisDepo == tbl.GirisDepo)
            {
                return(Json(new Result(false, "Aynı depoları seçemezsiniz."), JsonRequestBehavior.AllowGet));
            }
            // stok kontrol
            var varmi = false;

            foreach (var item in tbl.MalKodus)
            {
                var sayi = db.Yers.Where(m => m.MalKodu == item && m.Miktar > 0 && m.Kat.Bolum.Raf.Koridor.Depo.DepoKodu == tbl.CikisDepo).FirstOrDefault();
                if (sayi != null)
                {
                    varmi = true; break;
                }
            }
            if (varmi == false)
            {
                return(Json(new Result(false, "Seçtiğiniz hiç bir ürün stokta kayıtlı değil."), JsonRequestBehavior.AllowGet));
            }
            // çapraz stok kontrol
            var sql   = string.Format(@"EXEC FINSAT6{0}.wms.TransferKontrol @CikisDepo = '{1}', @MalKodus = '{2}'", vUser.SirketKodu, tbl.CikisDepo, string.Join(",", tbl.MalKodus));
            var list1 = db.Database.SqlQuery <frmTransferMalzemeler>(sql).ToList();

            foreach (var item in list1)
            {
                if (item.Depo2GunesStok != item.Depo2WmsStok)
                {
                    return(Json(new Result(false, item.MalKodu + " kodlu ürünün stoğu hatalı."), JsonRequestBehavior.AllowGet));
                }
            }
            //miktars
            for (int i = 0; i < tbl.Miktar.Length; i++)
            {
                tbl.Miktars[i] = tbl.Miktar[i].ToDecimal();
            }
            // add to list
            var aDepoID = Store.Detail(tbl.AraDepo).ID;
            var cDepoID = Store.Detail(tbl.CikisDepo);
            var gDepoID = Store.Detail(tbl.GirisDepo);
            int today = fn.ToOADate(), time = fn.ToOATime();
            // yeni bir görev eklenir
            var GorevNo = db.SettingsGorevNo(today, cDepoID.ID).FirstOrDefault();
            var cevap   = db.InsertIrsaliye(vUser.SirketKodu, cDepoID.ID, GorevNo, GorevNo, today, "Giriş: " + tbl.GirisDepo + ", Çıkış: " + tbl.CikisDepo, true, ComboItems.TransferÇıkış.ToInt32(), vUser.UserName, today, time, cDepoID.DepoAd, "", 0, "", "").FirstOrDefault();
            // yeni transfer eklenir
            var sonuc = Transfers.Operation(new Transfer()
            {
                SirketKod = vUser.SirketKodu, GirisDepoID = gDepoID.ID, CikisDepoID = cDepoID.ID, AraDepoID = aDepoID, GorevID = cevap.GorevID.Value
            });
            // find detays
            var TransferID = sonuc.Id;

            for (int i = 0; i < tbl.MalKodus.Count(); i++)
            {
                // stok kontrol
                var     malkodu = tbl.MalKodus[i];
                var     birim = tbl.Birims[i];
                var     tmpYer = db.Yers.Where(m => m.MalKodu == malkodu && m.Birim == birim && m.Kat.Bolum.Raf.Koridor.Depo.DepoKodu == tbl.CikisDepo && m.Miktar > 0).OrderByDescending(m => m.Miktar).ToList();
                decimal toplam = 0, miktar = 0;
                if (tmpYer.Count > 0)
                {
                    foreach (var itemyer in tmpYer)
                    {
                        if (itemyer.Miktar >= (tbl.Miktars[i] - toplam))
                        {
                            miktar = tbl.Miktars[i] - toplam;
                        }
                        else
                        {
                            miktar = itemyer.Miktar;
                        }
                        toplam += miktar;
                        // miktarı tabloya ekle
                        var tblyer = new GorevYer()
                        {
                            GorevID  = cevap.GorevID.Value,
                            YerID    = itemyer.ID,
                            MalKodu  = tbl.MalKodus[i],
                            Birim    = tbl.Birims[i],
                            Miktar   = miktar,
                            MakaraNo = itemyer.MakaraNo,
                            GC       = true
                        };
                        if (miktar > 0)
                        {
                            TaskYer.Operation(tblyer);
                        }
                        // toplam yeterli miktardaysa
                        if (toplam == tbl.Miktars[i])
                        {
                            break;
                        }
                    }

                    tbl.Miktars[i] = toplam;
                    // hepsi eklenince detayı db'ye ekle
                    if (tbl.Miktars[i] > 0)
                    {
                        sonuc = Transfers.AddDetay(new Transfer_Detay()
                        {
                            TransferID = TransferID, MalKodu = tbl.MalKodus[i], Birim = tbl.Birims[i], Miktar = tbl.Miktars[i]
                        });
                    }
                    if (tbl.Miktars[i] > 0)
                    {
                        IrsaliyeDetay.Operation(new IRS_Detay()
                        {
                            IrsaliyeID = cevap.IrsaliyeID.Value, MalKodu = tbl.MalKodus[i], Miktar = tbl.Miktars[i], Birim = tbl.Birims[i], KynkSiparisID = sonuc.Id, KynkSiparisTarih = TransferID
                        });
                    }
                }
            }
            return(Json(new Result(true, TransferID), JsonRequestBehavior.AllowGet));
        }
        public JsonResult Save(frmTransferMalzemeApprove tbl)
        {
            if (CheckPerm(Perms.Transfer, PermTypes.Writing) == false)
            {
                return(Json(new Result(false, "Yetkiniz yok"), JsonRequestBehavior.AllowGet));
            }
            // add to list
            var aDepoID = Store.Detail(tbl.AraDepo).ID;
            var cDepoID = Store.Detail(tbl.CikisDepo);
            var gDepoID = Store.Detail(tbl.GirisDepo);
            int today = fn.ToOADate(), time = fn.ToOATime();
            // yeni bir görev eklenir
            var GorevNo = db.SettingsGorevNo(today, cDepoID.ID).FirstOrDefault();
            var cevap   = db.InsertIrsaliye(vUser.SirketKodu, cDepoID.ID, GorevNo, GorevNo, today, "Giriş: " + tbl.GirisDepo + ", Çıkış: " + tbl.CikisDepo, true, ComboItems.TransferÇıkış.ToInt32(), vUser.UserName, today, time, cDepoID.DepoAd, "", 0, "", "").FirstOrDefault();
            // yeni transfer eklenir
            var sonuc = Transfers.Operation(new Transfer()
            {
                SirketKod = vUser.SirketKodu, GirisDepoID = gDepoID.ID, CikisDepoID = cDepoID.ID, AraDepoID = aDepoID, GorevID = cevap.GorevID.Value
            });
            // find detays
            var TransferID = sonuc.Id;

            for (int i = 0; i < tbl.MalKodus.Count(); i++)
            {
                // stok kontrol
                var     tmpYer = db.Yers.Where(m => m.MalKodu == tbl.MalKodus[i] && m.Birim == tbl.Birims[i] && m.Kat.Bolum.Raf.Koridor.Depo.DepoKodu == tbl.CikisDepo && m.Miktar > 0).OrderByDescending(m => m.Miktar).ToList();
                decimal toplam = 0, miktar = 0;
                if (tmpYer.Count > 0)
                {
                    foreach (var itemyer in tmpYer)
                    {
                        if (itemyer.Miktar >= (tbl.Miktars[i] - toplam))
                        {
                            miktar = tbl.Miktars[i] - toplam;
                        }
                        else
                        {
                            miktar = itemyer.Miktar;
                        }
                        toplam += miktar;
                        // miktarı tabloya ekle
                        var tblyer = new GorevYer()
                        {
                            GorevID  = cevap.GorevID.Value,
                            YerID    = itemyer.ID,
                            MalKodu  = tbl.MalKodus[i],
                            Birim    = tbl.Birims[i],
                            Miktar   = miktar,
                            MakaraNo = itemyer.MakaraNo,
                            GC       = true
                        };
                        if (miktar > 0)
                        {
                            TaskYer.Operation(tblyer);
                        }
                        // toplam yeterli miktardaysa
                        if (toplam == tbl.Miktars[i])
                        {
                            break;
                        }
                    }

                    tbl.Miktars[i] = toplam;
                    // hepsi eklenince detayı db'ye ekle
                    if (tbl.Miktars[i] > 0)
                    {
                        sonuc = Transfers.AddDetay(new Transfer_Detay()
                        {
                            TransferID = TransferID, MalKodu = tbl.MalKodus[i], Birim = tbl.Birims[i], Miktar = tbl.Miktars[i]
                        });
                    }
                    if (tbl.Miktars[i] > 0)
                    {
                        IrsaliyeDetay.Operation(new IRS_Detay()
                        {
                            IrsaliyeID = cevap.IrsaliyeID.Value, MalKodu = tbl.MalKodus[i], Miktar = tbl.Miktars[i], Birim = tbl.Birims[i], KynkSiparisID = sonuc.Id, KynkSiparisTarih = TransferID
                        });
                    }
                }
            }
            ViewBag.IrsaliyeId = cevap.IrsaliyeID.Value;
            // return
            return(Json(new Result(true, 1), JsonRequestBehavior.AllowGet));
        }