İndexlenmiş (tahtanın anahtarına uygun) ihaleleri tarih aralığında göre indexlenmiş haliyle buluyoruz
@param _tahta_id
@param _tarih1
@param _tarih2
@returns {*}
493059
function f_indexli_tarihine_gore_grupla(_tahta_id, _tarih1, _tarih2) {
        var db_tahta = require("./db_tahta");
        return db_tahta.f_db_tahta_ihale_indeksli_idler_tarihe_gore_sirali(_tahta_id)
            .then(function () {
                return (_tarih1 && _tarih2
                    ? result.dbQ.zrangebyscore(result.kp.temp.zsetTahtaAnahtaraGoreSiraliIhaleTarihineGore(_tahta_id), _tarih1, _tarih2)
                    : result.dbQ.zrangebyscore(result.kp.temp.zsetTahtaAnahtaraGoreSiraliIhaleTarihineGore(_tahta_id), "-inf", "+inf"))
                    .then(function (_ihale_idler) {
                        if (Array.isArray(_ihale_idler) && _ihale_idler.length > 0) {
                            /** @type {OptionsIhale} */
                            var opts = {};
                            opts.bArrKalemleri = false;
                            opts.bYapanKurum = true;
                            opts.bTakip = true;
                            /** @type {OptionsKalem} */
                            //opts.optKalem = {};
                            /*    opts.optKalem.bArrTeklifleri = false;
                             opts.optKalem.bOnayDurumu = false;
                             opts.optKalem.bTakiptemi = false;*/

                            return f_id(_ihale_idler, _tahta_id, opts)
                                .then(function (_ihaleler) {
                                    return _.sortBy(_ihaleler.groupX("IhaleTarihi", "Id"), "Key");
                                });
                        } else {
                            return [];
                        }
                    });
            });
    }
1310821
function f_kalemin_onay_durumu_kazandi_mi(_tahta_id, _kalem_id, _onay_durum_id) {
        l.info("f_db_kalemin_onay_durumu_kazandi_mi");
        return result.dbQ.sinter(
            result.kp.kalem.ssetTeklifleri(_kalem_id),
            result.kp.tahta.ssetTeklifleri(_tahta_id, true),
            result.kp.teklif.ssetTeklifOnayDurumlari(schema.SABIT.ONAY_DURUM.teklif.KAZANDI))
            .then(function (_teklif_idler) {
                return (_teklif_idler && _teklif_idler.length > 0 && _onay_durum_id == schema.SABIT.ONAY_DURUM.teklif.KAZANDI)
                    ? true
                    : false;
            });
    }
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");
            });
    }
1297757
function f_uyari_id(_uyari_id, _tahta_id, _opt) {

        /** @type {OptionsUyari} */
        var opts = result.OptionsUyari(_opt);

        return (Array.isArray(_uyari_id)
            ? result.dbQ.hmget_json_parse(result.kp.uyari.tablo, _uyari_id)
            : result.dbQ.hget_json_parse(result.kp.uyari.tablo, _uyari_id))
            .then(function (_dbUyari) {
                if (!_dbUyari) {
                    return null;
                } else {
                    var kullanici = require('./db_kullanici'),
                        rol = require('./db_rol');

                    function f_uyari_bilgisi(_uyari) {
                        if (!_uyari) {//uyarı yoksa null dön
                            return null;
                        }
                        var olusan_uyari = schema.f_create_default_object(schema.SCHEMA.UYARI);
                        _.extend(olusan_uyari, _uyari);

                        return result.dbQ.Q.all([
                                opts.bArrUyeleri ? kullanici.f_db_uye_id(_uyari.Uye_Idler, _tahta_id) : [],
                                opts.bArrRolleri ? rol.f_db_rol_id(_uyari.Rol_Idler) : []
                            ])
                            .then(function (_ress) {
                                olusan_uyari.Uyeler = _ress[0];
                                olusan_uyari.Roller = _ress[1];
                                return olusan_uyari;
                            });
                    }

                    return (Array.isArray(_dbUyari)
                        ? _dbUyari.map(f_uyari_bilgisi).allX()
                        : f_uyari_bilgisi(_dbUyari))
                        .then(function (_olusan_uyari) {
                            return _olusan_uyari;
                        });
                }

            });
    }
900301
function f_anahtar_index_ekle_urun(anahtar_id, urun_id) {
        return Array.isArray(urun_id)
            ? result.dbQ.sadd_array([result.kp.anahtar.ssetIndexUrun(anahtar_id)].concat(urun_id))
            : result.dbQ.sadd(result.kp.anahtar.ssetIndexUrun(anahtar_id), urun_id);
    }
467933
function f_ihaleyiKurumlaIliskilendir(_es_ihale, _db_ihale, _kul_id) {
            _kul_id = _kul_id || _kullanici_id;
            l.i("İhale kurumla ilişkilenecek > ihaleId: " + _db_ihale.Id + " - kurumId: " + _db_ihale.Kurum_Id);
            // - kurumun ihalelerine ekle
            // - ihalenin kurumunu ata
            if (_db_ihale.Id) {
                return result.dbQ.Q.all([
                    result.dbQ.sadd(result.kp.kurum.ssetIhaleleri(_db_ihale.Kurum_Id), _db_ihale.Id),
                    result.dbQ.hset(result.kp.ihale.hsetYapanKurumlari, _db_ihale.Id, _db_ihale.Kurum_Id)
                ]).then(function () {
                    return _es_ihale;
                });
            } else {
                return _es_ihale;
            }
        }
669901
function f_anahtar_index_ihale(anahtar_id) {
        return result.dbQ.smembers(result.kp.anahtar.ssetIndexIhale(anahtar_id));
    }
1284856
function f_tahta_ihale_indeksli_toplami(_tahta_id) {
        return f_tahta_ihale_indeksli_idler_tarihe_gore_sirali(_tahta_id)
            .then(function () {
                /**
                 * önce tüm sıralı indekslenen ihale sayısı
                 * sonra da işlem yapılan tarihten (bugun) itibaren ihale sayısını buluyoruz
                 * 1. bulduklarımız tüm ihale sayısını
                 * 2.si ise tarihi geçmemiş teklif verilebilir ihale sayısını getirir
                 */

                return result.dbQ.Q.all([
                    result.dbQ.zcount(result.kp.temp.zsetTahtaAnahtaraGoreSiraliIhaleTarihineGore(_tahta_id), "-inf", "+inf"),//1
                    result.dbQ.zcount(result.kp.temp.zsetTahtaAnahtaraGoreSiraliIhaleTarihineGore(_tahta_id), new Date().getTime(), "+inf")//2
                ]).then(function (_results) {
                    console.log("_results>" + JSON.stringify(_results));

                    var toplam = parseInt(_results[0] || 0),
                        gecerli = parseInt(_results[1] || 0);

                    return {
                        Toplam: toplam,
                        Gecerli: gecerli,
                        Gecersiz: toplam - gecerli
                    };
                });
            });
    }
896833
function f_tahta_ihale_gizlenen_sil(_tahta_id, _ihale_id) {
        return result.dbQ.srem(result.kp.tahta.ssetGizlenenIhaleleri(_tahta_id), _ihale_id)
            .then(function () {
                emitter.emit(schema.SABIT.OLAY.IHALE_GIZLENDI, _ihale_id, _tahta_id);
                return _ihale_id;
            });
    }
398188
function f_urunle_teklif_verilen_ihale_sayisi(_tahta_id, _urun_id, _onay_id, _para_id, _tarih1, _tarih2) {
        //1 ürünle verilen teklifler için temp oluştur
        //2 tarih aralığındaki ihaleleri bul
        //3 ihaleye verilen teklifleri ile ürüne verilen tekliflerin kesişimi varsa ihale tarihinde teklif verildi diye 1 yaz yoksa 0 yaz
        //4 geçici anahtarı sil
        //5 ihale tarihine göre grupla ve toplamları dön

        var ihale = require('./db_ihale');

        return result.dbQ.Q.all([
            f_urun_teklif_temp(_tahta_id, _urun_id, _para_id, _onay_id),//1
            ihale.f_db_ihale_idler_aktif_tarih_araligindakiler(_tahta_id, _tarih1, _tarih2)//2
        ]).then(function (_ress) {
            var ihale_idler = _ress[1];

            return result.dbQ.hmget_json_parse(result.kp.ihale.tablo, ihale_idler)
                .then(function (ihaleler) {
                    if (ihaleler && ihaleler.length > 0) {
                        var arr = _.map(ihaleler, function (_ihale) {
                            //3

                            return (_onay_id && _onay_id != null && _onay_id != "" && _onay_id > 0
                                ?
                                result.dbQ.zinterstore("temp_utg", "2",
                                    result.kp.ihale.ssetTeklifleri(_ihale.Id),
                                    result.kp.temp.zsetUrunTeklifleriOnayDurumunaGore(_tahta_id, _urun_id, _onay_id))
                                :
                                result.dbQ.zinterstore("temp_utg", "2",
                                    result.kp.ihale.ssetTeklifleri(_ihale.Id),
                                    result.kp.temp.zsetUrunTeklifleriParaBirimli(_tahta_id, _urun_id, _para_id)))
                                .then(function (_iteklif_idler) {
                                    return {
                                        Key: _ihale.IhaleTarihi,
                                        Count: _iteklif_idler ? 1 : 0
                                    };
                                });
                        });
                        return result.dbQ.Q.all(arr)
                            .then(function (_res) {
                                //4 geçici oluşturulan anahtarı siliyoruz
                                result.dbQ.del("temp_utg");
                                return _res;
                            });
                    } else {
                        return [];
                    }
                });

        }).then(function (_result) {
            //5
            //buraya ihale tarihinde teklif atılmış ise teklif toplamları gelir
            //şimdi günlere göre gruplayarak tekliflerin toplamlarını sum ile hesaplamalıyız.
            if (_result && _result.length > 0) {
                var result = _.chain(_result)
                    .groupBy("Key")
                    .map(function (value, key) {
                        return {
                            Key: key,
                            Count: _.sum(_.map(value, "Count"))
                        }
                    })
                    .value();
                return _.sortBy(result, "Key");
            } else {
                return [];
            }
        });
    }
1172062
function f_kalem_indeksliler_by_page(_tahta_id, _ihale_id, _arama) {
        l.info("f_db_kalem_indeksliler_by_page");
        var baslangic = 0,
            bitis = 10,
            sonucAnahtari = "temp_kalem_sayfali",
            defer = result.dbQ.Q.defer();

        if (_arama.Sayfalama) {
            baslangic = _arama.Sayfalama.Sayfa * _arama.Sayfalama.SatirSayisi;
            bitis = _arama.Sayfalama.SatirSayisi;
        }

        var sonuc = schema.f_create_default_object(schema.SCHEMA.LAZY_LOADING_RESPONSE);
        sonuc.ToplamKayitSayisi = 0;
        sonuc.Data = [];

        f_kalem_indeksli_idler_ihaleye_bagli(_tahta_id, _ihale_id)
            .then(function (_kalem_idler) {
                console.log("_kalem_idler>" + _kalem_idler);
                console.log(" _kalem_idler.length>" + _kalem_idler.length);

                if (_kalem_idler && _kalem_idler.length > 0) {

                    sonuc.ToplamKayitSayisi = _kalem_idler.length;


                    //sayfalı çekebilmek için önce zset e eklemeliyiz(? diye bir sey zset oluşturmak için yazıyoruz)
                    _kalem_idler.mapX(null, function (_id) {
                        db.redis.dbQ.zadd(sonucAnahtari, new Date().getTime(), _id);
                    }).allX()
                        .then(function () {

                            console.log("baslangic>" + baslangic);
                            console.log("bitis>" + bitis);

                            result.dbQ.Q.all([
                                result.dbQ.zrangebyscore(sonucAnahtari, "-inf", "+inf", "LIMIT", baslangic, bitis),
                                result.dbQ.expire(sonucAnahtari, 20)
                            ]).then(function (_ress) {

                                if (_ress[0] && _ress[0].length > 0) {
                                    f_kalem_id(_ress[0], _tahta_id)
                                        .then(function (_data) {
                                            sonuc.Data = _data;
                                            defer.resolve(sonuc);
                                        });
                                } else {
                                    defer.resolve(sonuc);
                                }
                            });
                        });

                } else {
                    defer.resolve(sonuc);
                }
            });
        return defer.promise;
    }
596052
function f_kontrol(es_ihale, db_ihale, tahta_id, kurum_id, _kul_id) {

        var orj_ihale_id = db_ihale.Id;
        return f_id(orj_ihale_id, tahta_id)
            .then(function (_eski_ihale_bilgisi) {

                return f_genel_kontrol(orj_ihale_id)
                    .then(function (_iGenelIhale) {
                        if (_iGenelIhale == 1) {

                            //genel ihaleler içinde kayıtlı
                            /*önce ezilen ihalelere ekle
                             * sonra ihale_id yi bir arttır ve yeni tahta ihalesi olarak ekle*/
                            return result.dbQ.sadd(result.kp.tahta.ssetEzilenIhaleleri(tahta_id), orj_ihale_id)
                                .then(function () {
                                    return result.dbQ.incr(result.kp.ihale.idx)
                                        .then(function (_id) {
                                            es_ihale.Id = db_ihale.Id = _id;
                                            db_ihale.Orjinal_Id = orj_ihale_id;

                                            return result.dbQ.Q.all([

                                                result.dbQ.hset(result.kp.ihale.tablo, _id, JSON.stringify(db_ihale)),
                                                result.dbQ.sadd(result.kp.tahta.ssetOzelIhaleleri(tahta_id, true), _id),
                                                result.dbQ.zadd(result.kp.ihale.zsetYapilmaTarihi, db_ihale.IhaleTarihi, db_ihale.Id)

                                            ]).then(function () {

                                                /**ihaleyi indexle
                                                 * ama önce ihale id yi indexlenmişse listeden kaldırmalıyız.
                                                 * (gelen konu içinde indexlenecek anahtar var mı bilmiyoruz, bu nedenle kaldırılmalı)
                                                 */

                                                    //_ihale, _kurum_id, _tahta_id, _kul_id
                                                emitter.emit(schema.SABIT.OLAY.IHALE_EKLENDI, es_ihale, kurum_id, tahta_id, _kul_id);

                                                //ihalenin kurumunu ata
                                                if (kurum_id > 0) {
                                                    return result.dbQ.Q.all([
                                                        result.dbQ.hset(result.kp.ihale.hsetYapanKurumlari, db_ihale.Id, kurum_id),
                                                        result.dbQ.srem(result.kp.kurum.ssetIhaleleri(_eski_ihale_bilgisi.Kurum_Id), db_ihale.Id),
                                                        result.dbQ.sadd(result.kp.kurum.ssetIhaleleri(kurum_id), db_ihale.Id)
                                                    ]);
                                                } else {
                                                    return db_ihale;
                                                }

                                            }).then(function () {
                                                //satırları kopyala ve durumlarını düzenle
                                                return f_guncellendi_satir_kontrol(tahta_id, db_ihale.Id, orj_ihale_id);
                                            }).then(function () {
                                                //teklifi var mı kontrol et varsa düzenle
                                                return f_guncellendi_teklif_kontrol(tahta_id, orj_ihale_id, db_ihale.Id);
                                            }).then(function () {

                                                //ihale bilgisini dön
                                                return f_id(db_ihale.Id, tahta_id);
                                            });
                                        });
                                });
                        }
                        else {

                            // bu ihale genel değil, tahtaya eklenen özel ihaledir

                            return result.dbQ.Q.all([
                                result.dbQ.hset(result.kp.ihale.tablo, db_ihale.Id, JSON.stringify(db_ihale)),
                                result.dbQ.zrem(result.kp.ihale.zsetYapilmaTarihi, db_ihale.Id),
                                result.dbQ.zadd(result.kp.ihale.zsetYapilmaTarihi, db_ihale.IhaleTarihi, db_ihale.Id)

                            ]).then(function () {
                                /**ihaleyi indexle
                                 * ama önce ihale id yi indexlenmişse listeden kaldırmalıyız.
                                 * (gelen konu içinde indexlenecek anahtar var mı bilmiyoruz, bu nedenle kaldırılmalı)
                                 */
                                emitter.emit(schema.SABIT.OLAY.IHALE_GUNCELLENDI,
                                    {
                                        eski_ihale: _eski_ihale_bilgisi,
                                        yeni_ihale: es_ihale,
                                        tahta_id: tahta_id,
                                        kul_id: _kul_id
                                    });

                                if (kurum_id > 0) {

                                    //ihalenin kurumunu yenisiyle değiştiriyoruz
                                    //kurumun ihalelerinde eski kurumu çıkarıp yenisini ekliyoruz

                                    return result.dbQ.Q.all([
                                        result.dbQ.hset(result.kp.ihale.hsetYapanKurumlari, db_ihale.Id, kurum_id),
                                        result.dbQ.srem(result.kp.kurum.ssetIhaleleri(_eski_ihale_bilgisi.Kurum_Id), db_ihale.Id),
                                        result.dbQ.sadd(result.kp.kurum.ssetIhaleleri(kurum_id), db_ihale.Id)
                                    ]);
                                }
                                else {
                                    return db_ihale;
                                }
                            }).then(function () {
                                return f_id(db_ihale.Id, tahta_id);
                            });
                        }
                    });
            });
    }
605288
function f_tahta_id(_tahta_id, _opts) {

        /** @type {OptionsTahta} */
        var opts = result.OptionsTahta(_opts);

        return (Array.isArray(_tahta_id)
            ? result.dbQ.hmget_json_parse(result.kp.tahta.tablo, _tahta_id)
            : result.dbQ.hget_json_parse(result.kp.tahta.tablo, _tahta_id))
            .then(function (_dbTahta) {
                if (!_dbTahta) {
                    return null;
                }

                var rol = require('./db_rol'),
                    kurum = require('./db_kurum');

                function f_tahta_bilgileri(_tahta, _optsTahta) {
                    var /** @type {Tahta} */
                        olusan_tahta = schema.f_create_default_object(schema.SCHEMA.INDEX_TAHTA),
                        arrPromises = [];

                    if (_optsTahta.bGenel) { // 1. Genel bilgilerini
                        olusan_tahta.Genel = _tahta;
                    }

                    arrPromises.push(
                        _optsTahta.bRolleri
                            ? rol.f_db_rol_tumu(_tahta.Id)
                            : []);

                    arrPromises.push(
                        (_optsTahta.bKurumu && _tahta.Kurum_Id)
                            ? kurum.f_db_kurum_id(_tahta.Kurum_Id)
                            : null);

                    arrPromises.push(
                        _optsTahta.bUyeleri
                            ? f_tahta_uyeleri(_tahta.Id, opts ? opts.optUye : {})
                            : []);

                    arrPromises.push(
                        _optsTahta.bAnahtarlari
                            ? f_tahta_anahtar_tumu(_tahta.Id)
                            : []);

                    arrPromises.push(
                        _optsTahta.bAjanda
                            ? f_tahta_ajandasi(_tahta.Id)
                            : null);

                    // tahtanın :
                    // 2. Kurumunu
                    // 3. Kullanicilarini
                    // 4. Rollerini
                    // 5. Anahtarlarını

                    return arrPromises.allX()
                        .then(function (_ress) {

                            olusan_tahta.Roller = _ress[0];
                            olusan_tahta.Genel.Kurum = _ress[1];
                            olusan_tahta.Uyeler = _ress[2];
                            olusan_tahta.AnahtarKelimeler = _ress[3];
                            olusan_tahta.Ajanda = _ress[4];

                            return olusan_tahta;
                        });
                }

                if (Array.isArray(_dbTahta)) {
                    opts.bAjanda = false;

                    return _dbTahta.mapX(null, f_tahta_bilgileri, opts)
                        .allX()
                        .then(function (_dbTahtaBilgileri) {

                            //tahtanın ajandalarını topluca çekiyoruz
                            var tahta_idler = _dbTahtaBilgileri.pluckX("Genel.Id");
                            return f_tahta_ajandasi(tahta_idler)
                                .then(function (_dbAjandaBilgileri) {
                                    if (!_dbAjandaBilgileri) {
                                        return _dbTahtaBilgileri;
                                    }

                                    _dbTahtaBilgileri.forEach(function (_elm, _idx) {
                                        _elm.Ajanda = _dbAjandaBilgileri[_idx];
                                    });

                                    return _dbTahtaBilgileri;
                                });
                        })
                } else {
                    return f_tahta_bilgileri(_dbTahta, opts);
                }
            })
            .fail(function (_err) {
                l.e("Fail içinde HATA:\n\t", _err);
                return _err;
            });
    }
781271
function f_urun_anahtar_ekle(_tahta_id, _urun_id, _anahtar) {
        return result.f_db_anahtar_ekle(_anahtar.Anahtar)
            .then(
                /**
                 *
                 * @param {AnahtarKelime} _anahtarObjesi
                 * @returns {*}
                 */
                function (_anahtarObjesi) {

                    emitter.emit(schema.SABIT.OLAY.URUN_ANAHTAR_EKLENDI, _tahta_id, _anahtarObjesi);

                    return result.dbQ.Q.all([
                        result.f_db_anahtar_index_ekle_urun(_anahtarObjesi.Id, _urun_id),
                        result.dbQ.zadd(result.kp.urun.zsetAnahtarKelimeleri(_tahta_id, _urun_id), new Date().getTime(), _anahtar.Anahtar)
                    ]).then(function () {
                        return _anahtarObjesi;
                    });
                });
    }
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 [];
                        }
                    });
            });
    }
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;
        });
    }
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;
                    });
            });
    }