region İHALE TEKLİFLERİ
193538
function f_teklif_idleri(_tahta_id, _ihale_id, _sayfalama) {
        var defer = result.dbQ.Q.defer();

        var sonucAnahtari = result.kp.temp.ssetTahtaIhaleTeklifleri(_tahta_id, _ihale_id);

        result.dbQ.exists(sonucAnahtari)
            .then(function (_iExist) {
                return _iExist
                    //temp anahtarı var yeniden çekmeye gerek yok, teklif bilgilerini dön
                    ? 1
                    //temp anahtarı yok oluştur ve teklif bilgilerini dön
                    : result.dbQ.sinterstore(sonucAnahtari, result.kp.ihale.ssetTeklifleri(_ihale_id), result.kp.tahta.ssetTeklifleri(_tahta_id, true));
            })
            .then(function () {
                var baslangic = 0,
                    bitis = 10;

                if (_sayfalama) {
                    baslangic = _sayfalama.Sayfa * _sayfalama.SatirSayisi,
                        bitis = _sayfalama.SatirSayisi;
                }

                (_sayfalama
                    ? result.dbQ.sort(sonucAnahtari, "LIMIT", baslangic, bitis)
                    : result.dbQ.smembers(sonucAnahtari))
                    .then(function (_dbReply) {
                        defer.resolve(_dbReply);
                    })
                    .fail(function (_err) {
                        l.e("İhale teklifleri çekilemedi. Hata: " + _err);
                        defer.reject(_err);
                    });
            });

        return defer.promise;
    }
1213029
function f_kalem_teklif_idleri(_tahta_id, _kalem_id, _sayfalama) {
        var defer = result.dbQ.Q.defer();

        var multi = result.rc.multi(),
            sonucAnahtari = result.kp.temp.ssetTahtaKalemTeklifleri(_tahta_id, _kalem_id);

        result.dbQ.exists(sonucAnahtari)
            .then(function (_iExist) {

                if (_iExist) {
                    //temp anahtarı var yeniden çekmeye gerek yok, teklif bilgilerini dön
                } else {
                    //temp anahtarı yok oluştur ve teklif bilgilerini dön
                    multi.sinterstore(sonucAnahtari, result.kp.kalem.ssetTeklifleri(_kalem_id), result.kp.tahta.ssetTeklifleri(_tahta_id, true));
                }

                multi.exec(function (err, replies) {
                    if (err) {
                        l.e("Teklifler çekilemedi. MULTI ERROR: " + err);
                        defer.reject(err);
                    }

                    if (_sayfalama) {
                        var baslangic = _sayfalama.Sayfa * _sayfalama.SatirSayisi,
                            bitis = _sayfalama.SatirSayisi;
                    }

                    (_sayfalama
                        ? result.dbQ.sort(sonucAnahtari, "LIMIT", baslangic, bitis)
                        : result.dbQ.smembers(sonucAnahtari))
                        .then(function (_dbReply) {
                            defer.resolve(_dbReply);
                        })
                        .fail(function (_err) {
                            l.e("Kalem teklifleri çekilemedi. Hata: " + _err);
                            defer.reject(_err);
                        });
                });
            });

        return defer.promise;
    }
1174549
function f_kalem_takip_idler(_tahta_id) {
        return result.dbQ.smembers(result.kp.tahta.ssetTakiptekiKalemleri(_tahta_id));
    }
909632
function f_urun_teklif_kontrol(_tahta_id, _urun_id) {
        return result.dbQ.smembers(result.kp.urun.ssetTeklifleri(_tahta_id, _urun_id));
    }
1145706
function f_kalem_teklif_kontrol(_tahta_id, _kalem_id) {
        if (_tahta_id > 0) {
            return result.dbQ.sinter(result.kp.kalem.ssetTeklifleri(_kalem_id), result.kp.tahta.ssetTeklifleri(_tahta_id, true));
        } else {
            return [];
        }
    }
566055
function f_kullanici_tahta_idleri(kul_id) {
        // 1. + Kullanıcının sahip oldukları
        // 2. + Kullanıcının üyesi olduğu tahta id leri
        // 3. - Kullanıcının sildikleri
        return [
            result.dbQ.sunion(
                result.kp.kullanici.ssetSahipOlduguTahtalari(kul_id, true),//1.
                result.kp.kullanici.ssetUyeOlduguTahtalari(kul_id, true)//2.
            ),
            result.dbQ.smembers(result.kp.tahta.ssetSilinen) //3.
        ].allX().then(function (_arrReplies) {
            var arrAktifTahtalar = _arrReplies[0],
                arrPasifTahtalar = _arrReplies[1],
                kullaniciTahtalari = arrAktifTahtalar.differenceXU(arrPasifTahtalar);

            return kullaniciTahtalari.mapX(null, parseInt);
        }).fail(function (_err) {
            extension.ssr = [{"_err": _err}];
            throw _err;
        });
    }
994384
function f_idler_aktif_tarih_araligindakiler(_tahta_id, _tarih1, _tarih2) {
        console.log("f_idler_aktif_tarih_araligindakiler")
        return f_tahta_ihale_idler_aktif(_tahta_id)
            .then(function (_ihale_idler) {
                var tarih1 = _tarih1 ? _tarih1 : "-inf",
                    tarih2 = _tarih2 ? _tarih2 : "+inf";

                return result.dbQ.zunionstore(result.kp.temp.zsetTahtaIhaleTarihineGore(_tahta_id), 2, result.kp.ihale.zsetYapilmaTarihi, result.kp.temp.ssetTahtaIhale(_tahta_id))
                    .then(function () {
                        return result.dbQ.zrangebyscore(result.kp.temp.zsetTahtaIhaleTarihineGore(_tahta_id), tarih1, tarih2);
                    })
                    .then(function (_ihale_idler) {
                        if (Array.isArray(_ihale_idler) && _ihale_idler.length > 0) {
                            return _ihale_idler;
                        } else {
                            return [];
                        }
                    });
            });
    }
1195836
function f_indekslenen_ve_takip_edilen_ihale_idleri(_tahta_id) {
        return result.dbQ.Q.all([
            f_tahta_ihale_indeksli_idler(_tahta_id),
            f_tahta_ihale_takip_idler(_tahta_id)
        ]).then(function (_ress) {
            console.log("indekslenen_ve_takip_edilen_ihale_idleri SONUCU:");
            console.log(JSON.stringify(_ress));
            var indexliler = _ress[0],
                takiptekiler = _ress[1];

            return _.union(indexliler, takiptekiler);
        })
    }
657854
function f_kalem_ekle_tahta(_tahta_id, _ihale_id, _es_kalem, _db_kalem, _kul_id) {

        var onay_durumu = _es_kalem.OnayDurumu;

        //genel ihaleye tahtada yeni kalem ekleniyor
        //bu durumda sadece tahtanın (tahta:401:ihale:101:kalem) kalemlerine eklemeliyiz
        //ihalenin genel kalemlerine değil!! (ihale:101:kalem)
        return result.dbQ.incr(result.kp.kalem.idx)
            .then(function (_id) {
                _es_kalem.Id = _db_kalem.Id = _id;

                emitter.emit(schema.SABIT.OLAY.KALEM_EKLENDI, _es_kalem, _ihale_id, _tahta_id, _kul_id);

                //satırı ihale-tahta ile ilişkilendireceğiz
                return result.dbQ.hset(result.kp.kalem.tablo, _id, JSON.stringify(_db_kalem))
                    .then(function () {

                        return result.dbQ.Q.all([
                            result.dbQ.sadd(result.kp.tahta.ssetOzelKalemleri(_tahta_id, _ihale_id, true), _db_kalem.Id),
                            result.dbQ.hset(result.kp.kalem.hsetIhaleleri, _db_kalem.Id, _ihale_id)
                        ]);
                    })
                    .then(function () {
                        //onay durumu varsa güncelle yoksa satırı döner
                        return f_kalem_onay_durumu_guncelle(_tahta_id, _ihale_id, _db_kalem.Id, onay_durumu);
                    })
                    .then(function () {
                        return f_kalem_id(_id, _tahta_id);
                    });
            })
            .fail(function (_err) {
                l.e(_err);
                throw new exception.Istisna("kalem eklenemedi", "HATA: " + _err);
            });
    }
1028497
function f_tahta_ihale_takip_sil(_tahta_id, _ihale_id) {
        return result.dbQ.srem(result.kp.tahta.ssetTakiptekiIhaleleri(_tahta_id), _ihale_id);
    }
1064255
function f_rol_ekle(_rol, _tahta_id) {

        return result.dbQ.incr(result.kp.rol.idx)
            .then(function (_id) {
                _rol.Id = _id;
                // 1. Rollere ekleyelim
                // 2. Tahtayla ilişkilendirelim
                return result.dbQ.Q.all([
                    result.dbQ.hset(result.kp.rol.tablo, _id, JSON.stringify(_rol)),// 1
                    result.dbQ.sadd(result.kp.tahta.ssetOzelTahtaRolleri(_tahta_id, true), _rol.Id) // 2
                ]).then(function () {
                    return f_ol_id(_rol.Id);
                });
            });
    }
607498
function f_kurum_tumu(tahta_id, ihale_id) {
        return result.dbQ.sinter(result.kp.tahta.ssetTeklifleri(tahta_id, true), result.kp.ihale.ssetTeklifleri(ihale_id))
            .then(function (_teklif_idler) {
                if (_teklif_idler && _teklif_idler.length > 0) {
                    return result.dbQ.hmget(result.kp.teklif.hsetKurumlari, _teklif_idler)
                        .then(function (_kurum_idler) {
                            if (_kurum_idler && _kurum_idler.length > 0) {
                                var db_kurum = require("./db_kurum");
                                return db_kurum.f_db_kurum_id(_kurum_idler);
                            } else {
                                return [];
                            }
                        });
                } else {
                    return null;
                }
            })
            .fail(function () {
                l.e("ihale kurumları çekilemedi");
            });
    }
1007627
function f_tahta_ihale_gizlenen_tumu(_tahta_id) {
        return f_tahta_ihale_gizlenen_idler(_tahta_id)
            .then(function (_ihale_idler) {
                if (_ihale_idler && _ihale_idler.length > 0) {
                    /** @type {OptionsIhale} */
                    var opts = {};
                    opts.bArrKalemleri = true;
                    opts.bYapanKurum = true;
                    opts.bTakip = true;
                    opts.optKalem.bArrTeklifleri = false;
                    opts.optKalem.bOnayDurumu = true;
                    opts.optKalem.bTakiptemi = true;
                    var db_ihale = require("./db_ihale");
                    return db_ihale.f_db_ihale_id(_ihale_idler, _tahta_id, opts);
                } else {
                    return [];
                }
            });
    }
356805
function f_tahta_kalem_takip_ekle(_tahta_id, _kalem_id) {
        //kalem takip edilecek olarak belirlendiğinde ihalesi de takip edilecek olarak ayarlamalıyız
        return result.dbQ.sadd(result.kp.tahta.ssetTakiptekiKalemleri(_tahta_id), _kalem_id)
            .then(function () {
                return result.dbQ.hget(result.kp.kalem.hsetIhaleleri, _kalem_id)
                    .then(function (_ihale_id) {
                        return result.dbQ.sadd(result.kp.tahta.ssetTakiptekiIhaleleri(_tahta_id), _ihale_id);
                    });
            });
    }
1059532
function f_kalem_teklif_tumu(_tahta_id, _kalem_id, _sayfalama) {
        return f_kalem_teklif_idleri(_tahta_id, _kalem_id, _sayfalama)
            .then(function (_aktifler) {
                var sonucAnahtari = result.kp.temp.ssetTahtaKalemTeklifleri(_tahta_id, _kalem_id),
                    sonuc = schema.f_create_default_object(schema.SCHEMA.LAZY_LOADING_RESPONSE);

                if (_aktifler.length == 0) {
                    sonuc.ToplamKayitSayisi = 0;
                    sonuc.Data = [];
                    return sonuc;

                } else {

                    return result.dbQ.scard(sonucAnahtari)
                        .then(function (_toplamKayitSayisi) {
                            sonuc.ToplamKayitSayisi = _toplamKayitSayisi;

                            /** @type {OptionsTeklif} */
                            var opts = db.teklif.OptionsTeklif({
                                bArrUrunler: true,
                                bKalemBilgisi: false,
                                bIhaleBilgisi: false,
                                bKurumBilgisi: true,
                                optUrun: {}
                            });


                            var db_teklif = require('./db_teklif');
                            return db_teklif.f_db_teklif_id(_aktifler, _tahta_id, opts)
                                .then(function (_dbTeklifler) {
                                    sonuc.Data = _dbTeklifler;
                                    return sonuc;
                                });
                        });
                }

            });
    }
1025392
function f_kalem_gizlenen_ekle(_tahta_id, _kalem_id) {
        return result.dbQ.sadd(result.kp.tahta.ssetGizlenenKalemleri(_tahta_id), _kalem_id)
            .then(function () {
                //kalemin ihalesini buluyoruz ki ihale temp setinde kayıt varsa onları da silelim
                result.dbQ.hget(result.kp.kalem.hsetIhaleleri, _kalem_id)
                    .then(function (_ihale_id) {
                        emitter.emit(schema.SABIT.OLAY.KALEM_GIZLENDI, _kalem_id, _ihale_id, _tahta_id);
                        return _kalem_id;
                    });
            });
    }
1005718
function f_ihaleDunyasiIhalesiniKaydet(_elm) {
        var defer = redis.dbQ.Q.defer();

        f_ihaleRedisteVarmi(_elm.ihale_id)
            .then(function (_ihaleVarmi) {
                if (_ihaleVarmi === 0) {
                    return f_ihaleIdsiniKaydet(_elm.ihale_id)
                        .then(function () {
                        //bölge ve şehir kaydet
                        return redis.dbQ.Q.all([
                            f_sehir_ekle(_elm.ilad),
                            f_bolge_ekle(_elm.bolge)
                        ])
                            .then(function (_ress) {
                            return f_ihaleyiRediseKaydet(_elm, _ress[0], _ress[1])
                        });
                    });
                }
            })
            .then(function (_result) {
                defer.resolve(_result);
            })
            .fail(function (_err) {
                defer.reject(_err);
            });

        return defer.promise;
    }