Kullanıcı tahtada görmek istemediği ihaleleri gizleyebilir, böylece listede gizlenenler görünmeyecektir.
@param {integer} _tahta_id
@param {integer} _ihale_id
964316
function f_tahta_ihale_gizlenen_ekle(_tahta_id, _ihale_id) {
        return result.dbQ.sadd(result.kp.tahta.ssetGizlenenIhaleleri(_tahta_id), _ihale_id)
            .then(function () {
                emitter.emit(schema.SABIT.OLAY.IHALE_GIZLENDI, _ihale_id, _tahta_id);
                return _ihale_id;
            });
    }
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;
        });
    }
1209154
function f_getIhale(_ihale) {
        console.log("---------- F_GET_IHALE -------------");
        var defer = db.redis.dbQ.Q.defer(),
            sayfa = '';

        options.method = 'GET';
        options.path = _ihale.yonlendirilenAdres || _ihale.adres.replace('www.', '');
        delete options.headers['Content-Length'];
        delete options.headers['Content-Type'];

        http.request(options, function (res) {
                console.log('STATUS: ' + res.statusCode);
                console.log('HEADERS: ' + JSON.stringify(res.headers));

                res.on('error', function () {
                        var error = "f_getIhale sırasında, Response Error: " + JSON.stringify(arguments);
                        console.log(error);
                        defer.reject(error);
                    })
                    .on('data', function (chunk) {
                        sayfa += f_encodeTurkish(chunk);
                    });

                if (res.statusCode == 302) {
                    console.log("-------------- LOCATION -----------\n" + res.headers.location);
                    _ihale.yonlendirilenAdres = 'http://saglikbank.com/' + res.headers.location;
                    options.headers.Referer = options.path;
                    console.log(_ihale.yonlendirilenAdres);
                    res.on('end', function () {
                        sayfa = '';
                        f_getIhale(_ihale)
                            .then(function (_ihale) {
                                console.log("ikinci kez getIhale");
                                defer.resolve(_ihale);
                            })
                            .fail(function () {
                                var error = "f_getIhale sırasında Error: " + JSON.stringify(arguments);
                                console.log(error);
                                defer.reject(error);
                            });
                    });
                } else {
                    res.on('end', function () {
                        $sayfa = $(sayfa);

                        var ihaleUsul = $sayfa.find("#UsulLBL").text().trim();
                        var ihaleNo = $sayfa.find("#KayitNoLBL").text().trim();
                        var ihaleKonusu = $sayfa.find("#IhaleKonusuLBL").text().trim();

                        var kurumAdi = $sayfa.find("#ctl00_KurumAdi2LBL").text().trim();
                        var ihaleTarihi = $sayfa.find("#ctl00_IhaleTarihi2LBL").text().trim();
                        var tarih1 = moment(ihaleTarihi, "DD.MM.YYYY");

                        var kurumTelNo = $sayfa.find("#ctl00_KurumTelefonNoLBL").text().trim();
                        var sistemeEklenmeTarihi = $sayfa.find("#ctl00_EklemeTarihiLBL").text();
                        var tarih2 = moment(sistemeEklenmeTarihi, "DD.MM.YYYY hh:mm");

                        var kurumFaksNo = $sayfa.find("#ctl00_KurumFaksNoLBL").text().trim();
                        var kurumEmail = $sayfa.find("#ctl00_KurumEmailTB").find("a").text().trim();
                        var kurumAdres = $sayfa.find("#ctl00_KurumAdresiLBL").text().trim();
                        var sartnameAdres = $sayfa.find("#ctl00_SartnameListesiLBL").find("a").text().trim();
//TODO: Sadece bir şartname varsa tamam ama zeyilname ya da birden fazla dosya için kontrol edilecek

                        var yeni_ihale = {
                            "Kurum": {
                                "Adi": kurumAdi,
                                "Id": 0,
                                "Tel": kurumTelNo,
                                "Eposta": kurumEmail == "[email protected]" ? "" : kurumEmail,
                                "Faks": kurumFaksNo,
                                "AcikAdres": kurumAdres
                            },
                            "IhaleNo": ihaleNo.replace('(', '').replace(')', ''),
                            "Konusu": ihaleKonusu,
                            "IhaleTarihi": new Date(tarih1).getTime(),
                            "IhaleUsul": ihaleUsul,
                            "YapilacagiAdres": "",
                            "SartnameAdres": sartnameAdres,
                            "SistemeEklenmeTarihi": new Date(tarih2).getTime()
                        };

                        var tbl = $sayfa.find(".listeTablosu").parents("table").first().find("tr").map(function () {
                            if ($(this).attr("style")) {
                                return {
                                    "SiraNo": $(this).find("td").first().find("strong").text().trim(),
                                    "MalzemeCinsi": $(this).find("td:nth-child(1)").text().replace('\n', '').replace('\r', '').trim(),
                                    "Miktar": $(this).find("td:nth-child(2)").text().trim(),
                                    "Birim": $(this).find("td:nth-child(3)").text().trim(),
                                    "Aciklama": $(this).find('td:nth-child(4)').text().replace('\n', '').replace('\r', '').trim()
                                }
                            }
                        }).toArray();
                        yeni_ihale.Kalemler = tbl;

                        _ihale = _.extend(_ihale, yeni_ihale);
                        console.log("oluşan ihale:" + JSON.stringify(_ihale));
                        defer.resolve(_ihale);
                    });
                }
            })
            .on('error', function (e) {
                var error = 'Problem with request: ' + e.message;
                console.log(error);
                defer.reject(error);
            })
            .on('end', function (e) {
            })
            .end();
        return defer.promise;
    }
959789
function f_tahta_anahtar_tumu(_tahta_id) {

        //tahtanın anahtar kelimelerini döner
        return result.dbQ.zrangebyscore([result.kp.tahta.zsetAnahtarKelimeleri(_tahta_id), '-inf', '+inf'])
            .then(function (_arr_anahtar_kelimeler) {
                if (_arr_anahtar_kelimeler && _arr_anahtar_kelimeler.length > 0) {

                    //önce anahtar kelimelere ait id leri tutuyoruz sonra da bilgilerini dönüyoruz
                    return result.f_db_anahtar_key(_arr_anahtar_kelimeler)
                        .then(function (_dbAnahtar_idler) {
                            return _arr_anahtar_kelimeler.map(function (_elm, _idx) {
                                /** @type {AnahtarKelime} */
                                return {Id: _dbAnahtar_idler[_idx], Anahtar: _elm};
                            }).allX();
                        });


                } else {
                    return [];
                }
            });
    }
239029
function f_bolge_ekle(_bolge, _tahta_id) {

        /**
         *
         * @param {Bolge} _bolge
         * @param {integer} _tahta_id
         * @returns {*}
         */
        function f_bolge_ekle(_bolge, _tahta_id) {
            //SON EKLENEN bölgenin İD SİNİ ÇEK VE EKLEME İŞLEMİNE BAŞLA

            return result.dbQ.sismember(result.kp.bolge.ssetAdlari, _bolge.Adi)
                .then(function (_iKayitli) {
                    if (_iKayitli == 1) {
                        return f_bolge_bul_adindan(_bolge.Adi);
                    } else {
                        return result.dbQ.incr(result.kp.bolge.idx)
                            .then(function (_id) {
                                _bolge.Id = _id;

                                //tahta_id yoksa genele eklenecek varsa da tahtanın özel bölgelerine
                                return result.dbQ.Q.all([
                                        result.dbQ.hset(result.kp.bolge.tablo, _id, JSON.stringify(_bolge)),
                                        result.dbQ.sadd(result.kp.bolge.ssetAdlari, _bolge.Adi),
                                        !_tahta_id ? result.dbQ.sadd(result.kp.bolge.ssetBolgeGenel, _id) : null,
                                        _tahta_id ? result.dbQ.sadd(result.kp.tahta.ssetBolgeleri(_tahta_id, true), _id) : null
                                    ])
                                    .then(function () {
                                        return f_bolge_id(_id);
                                    });
                            });
                    }
                });
        }

        if (Array.isArray(_bolge) && _bolge.length > 0) {
            return _bolge.mapX(null, f_bolge_ekle, _tahta_id).allX();
        }
        else {
            return f_bolge_ekle(_bolge, _tahta_id);
        }
    }
619746
function f_tahta_ihale_takip_tumu(_tahta_id) {
        return f_tahta_ihale_takip_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;

                    var db_ihale = require("./db_ihale");

                    return db_ihale.f_db_ihale_id(_ihale_idler, _tahta_id, opts);
                } else {
                    return [];
                }
            });
    }
1024348
function f_tahta_kurum_idleri(_tahta_id) {
        return result.dbQ.smembers(result.kp.tahta.ssetOzelKurumlari(_tahta_id, true));
    }
1269712
function f_teklif_urunleri(_teklif_id, _tahta_id, _opts) {

        return f_teklif_urun_idleri(_teklif_id)
            .then(function (_dbUrun_idler) {
                if (_dbUrun_idler && _dbUrun_idler.length > 0) {
                    console.log("_dbUrun_idler>" + _dbUrun_idler);

                    var db_urun = require("./db_urun");
                    return db_urun.f_db_urun_id(_dbUrun_idler, _tahta_id, _opts)

                } else {
                    return []
                }
            });
    }
1363436
function f_cop_teklif_sil(_tahta_id, _teklif_id, _kullanici_id) {
        var teklif = require('./db_teklif');
        return teklif.f_db_teklif_sil(_teklif_id, _tahta_id, _kullanici_id);
    }
706790
function f_kalem_indeksli_idler(_tahta_id) {
        console.log("f_db_kalem_indeksli_idler");

        var db_tahta = require('./db_tahta');
        var temp_key = result.kp.temp.ssetTahtaAnahtarKalemleri(_tahta_id);

        return result.dbQ.exists(temp_key)
            .then(function (_iExist) {
                if (_iExist == 1) {
                    return result.dbQ.smembers(temp_key);
                } else {
                    //tahtanın anahtarlarını çekiyoruz
                    return db_tahta.f_db_tahta_anahtar_tumu(_tahta_id)
                        .then(function (_arrKelimeler) {
                            console.log("_arrKelimeler>" + _arrKelimeler);
                            if (_arrKelimeler.length == 0) {
                                l.warn("anahtarlar boş geldiği için kalem id gönderemiyoruz");
                                return [];
                            }

                            var anahtarIdleri = _arrKelimeler.pluckX("Id"),
                                arrAnahtarlarinSetAdlari = anahtarIdleri.map(function (_anahtar_id) {
                                    return result.kp.anahtar.ssetIndexKalem(_anahtar_id);
                                });

                            arrAnahtarlarinSetAdlari.unshift(temp_key);

                            //anahtar kelimelerin geçtiği kalemler
                            return result.dbQ.sunionstore_array(arrAnahtarlarinSetAdlari)
                                .then(function () {
                                    return result.dbQ.smembers(temp_key);
                                });
                        })
                        .fail(function (_err) {
                            var hata = "indeksli kalemler çekilirken hata oluştu: " + _err;
                            l.e(hata);
                            return hata;
                        });
                }
            });
    }
1351419
function f_ihaleEkle(_es_ihale, _db_ihale, _kul_id) {

            _kul_id = _kul_id || _kullanici_id;

            return result.dbQ.incr(result.kp.ihale.idx)
                .then(function (_id) {
                    _es_ihale.Id = _id;
                    _db_ihale.Id = _id;

                    return result.dbQ.Q.all([
                            result.dbQ.hset(result.kp.ihale.tablo, _db_ihale.Id, JSON.stringify(_db_ihale)),
                            result.dbQ.sadd(result.kp.ihale.ssetGenel, _db_ihale.Id),
                            result.dbQ.sadd(result.kp.ihale.ssetIhaleUsulAdlari, _db_ihale.IhaleUsul),
                            result.dbQ.sadd(result.kp.ihale.ssetGenel, _db_ihale.Id),
                            result.dbQ.hset(result.kp.ihale.hsetIhale_ihaleDunyasiId, _es_ihale.IhaleProviders.IhaleDunyasi.IhaleDunyasiId, _db_ihale.Id),
                            result.dbQ.zadd(result.kp.ihale.zsetYapilmaTarihi, _db_ihale.IhaleTarihi, _db_ihale.Id)
                        ])
                        .then(function () {
                            //şehir ekle
                            if (_db_ihale.IlAdi) {
                                var db_sehir = require("./db_sehir");
                                return db_sehir.f_db_sehir_ekle(/** @type {Sehir} */{Id: 0, Adi: _db_ihale.IlAdi});
                            } else {
                                return _id;
                            }
                        })
                        .then(function () {
                            //bölge ekle
                            if (_db_ihale.BolgeAdi) {
                                var db_bolge = require("./db_bolge");
                                return db_bolge.f_db_bolge_ekle(/** @type {Bolge} */{Id: 0, Adi: _db_ihale.BolgeAdi});
                            } else {
                                return _id;
                            }
                        })
                });
        }
52909
function _f_arama_kriterinden_ihale_idleri(_arama, _tahta_id) {
        // Validasyon
        if (!_arama) throw exception.Istisna('Arama kriteri boş bırakılamaz!');
        if (!_tahta_id) throw exception.Istisna('Tahta ID falsy olamaz!');

        var defer_kriter = result.dbQ.Q.defer();

        switch (_arama.Kriter) {

            case schema.SABIT.URL_QUERY.KRITER.TAKIPTEKILER :
                defer_kriter = f_tahtanin_takipteki_ihale_idleri(_tahta_id);
                break;
            case schema.SABIT.URL_QUERY.KRITER.GIZLENENLER :
                defer_kriter = f_tahtanin_gizlenen_ihale_idleri(_tahta_id);
                break;
            case schema.SABIT.URL_QUERY.KRITER.AKTIFLER :
            default:
                defer_kriter = f_tahta_ihale_idler_aktif(_tahta_id);
                break;
        }

        return defer_kriter.promise;
    }
362792
function f_teklifleri(tahta_id, ihale_id) {
        var defer = result.dbQ.Q.defer();

        //ihaleye bağlı teklifleri bul
        result.rc.multi()
            .sinterstore("temp_ihale_teklif", result.kp.ihale.ssetTeklifleri(ihale_id), result.kp.tahta.ssetTeklifleri(tahta_id, true))
            .smembers("temp_ihale_teklif")
            .expire("temp_ihale_teklif", 10)
            .exec(function (err, replies) {
                l.info("MULTI REPLY" + JSON.stringify(replies));

                if (replies[1] && replies[1].length > 0) {
                    defer.resolve(replies[1]);

                } else {
                    defer.resolve(null);
                }
            });

        return defer.promise;
    }
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;
                    });
            });
    }
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 [];
                        }
                    });
            });
    }
630717
function f_tahtadan_ayril(_tahta_id, _kul_id) {

        return result.dbQ.Q.all([
            result.dbQ.srem(result.kp.kullanici.ssetUyeOlduguTahtalari(_kul_id, true), _tahta_id),
            result.dbQ.hdel(result.kp.tahta.hsUyeleri(_tahta_id), _kul_id)
        ]).then(function () {
            emitter.emit(schema.SABIT.OLAY.TAHTA_AYRIL, _tahta_id, _kul_id);
            return _tahta_id;
        });
    }
178451
function f_uyari_sil(_tahta_id, _uyari_id, _kul_id) {
        return result.dbQ.Q.all([
            result.dbQ.srem(result.kp.tahta.ssetUyarilari(_tahta_id, true), _uyari_id),
            result.dbQ.sadd(result.kp.tahta.ssetUyarilari(_tahta_id, false), _uyari_id)
        ]);
    }