Tahtanın görebileceği ihaleleri tarihlerine göre listeler
Tarih aralığı verilmezse tüm ihaler verilirse tarih aralığındaki ihaleler array olarak döner
@param {integer} _tahta_id
@param {integer} _tarih1
@param {integer} _tarih2
@returns {*}
329747
function f_tumu_tarih_araligindakiler(_tahta_id, _tarih1, _tarih2) {
        console.log("f_tumu_tarih_araligindakiler")
        return f_idler_aktif_tarih_araligindakiler(_tahta_id, _tarih1, _tarih2)
            .then(function (_ihale_idler) {
                if (Array.isArray(_ihale_idler) && _ihale_idler.length > 0) {
                    /** @type {OptionsIhale} */
                    var opts = {};
                    opts.bArrKalemleri = true;
                    opts.bYapanKurum = true;
                    opts.bTakip = true;
                    opts.optKalem = {};
                    opts.optKalem.bArrTeklifleri = false;
                    opts.optKalem.bOnayDurumu = true;
                    opts.optKalem.bTakiptemi = true;

                    return f_id(_ihale_idler, _tahta_id, opts);
                } else {
                    return [];
                }
            });

    }
79013
function f_id(_ihale_id, _tahta_id, _opts) {

        function f_ihale_detaylarini_bagla(_ihale, _optsIhale) {

            //ihale yoksa null dön
            if (!_ihale) {
                return null;
            }

            var olusan_ihale = schema.f_create_default_object(schema.SCHEMA.IHALE);
            olusan_ihale = _.extend(olusan_ihale, _ihale);

            return result.dbQ.Q.all([
                    _optsIhale.bYapanKurum ? f_yapan_kurum(_ihale.Id) : {Id: 0},
                    _optsIhale.bTakip ? result.dbQ.sismember(result.kp.tahta.ssetTakiptekiIhaleleri(_tahta_id), _ihale.Id) : 0,
                    opts.bArrKalemleri ? f_kalem_tumu(_ihale.Id, _tahta_id, _optsIhale.optKalem) : []])
                .then(function (_arrResults) {
                    olusan_ihale.Kurum = _arrResults[0];
                    olusan_ihale.Takip = _arrResults[1];
                    olusan_ihale.Kalemler = _arrResults[2];
                    return olusan_ihale;
                });

            /* arrPromises.push(_optsIhale.bYapanKurum
             ? f_yapan_kurum(_ihale.Id)
             : null);

             arrPromises.push(_optsIhale.bTakip
             ? result.dbQ.sismember(result.kp.tahta.ssetTakiptekiIhaleleri(_tahta_id), _ihale.Id)
             : 0);

             arrPromises.push(opts.bArrKalemleri
             ? f_kalem_tumu(_ihale.Id, _tahta_id, _optsIhale.optKalem)
             : []);

             return arrPromises.allX()
             .then(function (_arrResults) {
             console.log("_arrResults")
             console.log(JSON.stringify(_arrResults))

             olusan_ihale.Kurum = _arrResults[0];
             //olusan_ihale.Kurum_Id = olusan_ihale.Kurum.Id;
             olusan_ihale.Takip = _arrResults[1];
             olusan_ihale.Kalemler = _arrResults[2];
             return olusan_ihale;
             });*/
        }

        var opts = result.OptionsIhale(_opts);

        return (Array.isArray(_ihale_id)
            ? result.dbQ.hmget_json_parse(result.kp.ihale.tablo, _ihale_id)
            : result.dbQ.hget_json_parse(result.kp.ihale.tablo, _ihale_id))
            .then(function (_dbIhale) {
                if (_dbIhale == null) {
                    return null;
                } else {

                    // Ihale dizimizin kurumlarını çekerek herbirine bağlayalım
                    if (Array.isArray(_dbIhale)) {
                        opts.bYapanKurum = false;

                        return _dbIhale
                            .mapX(null, f_ihale_detaylarini_bagla, opts)
                            .allX()
                            .then(function (dbIhaleBilgilerle) {
                                return f_yapan_kurum(_ihale_id)
                                    .then(function (dbYapanKurumlar) {

                                        dbIhaleBilgilerle.forEach(function (_elm, _idx, _arr) {
                                            if (_elm) {
                                                _arr[_idx].Kurum = dbYapanKurumlar[_idx];
                                            }
                                        });

                                        return dbIhaleBilgilerle;
                                    });
                            });

                    } else {
                        return f_ihale_detaylarini_bagla(_dbIhale, opts)
                    }
                }
            });
    }
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;
    }
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;
        });
    }
1174549
function f_kalem_takip_idler(_tahta_id) {
        return result.dbQ.smembers(result.kp.tahta.ssetTakiptekiKalemleri(_tahta_id));
    }
754369
function f_kurum_teklif_temp(_tahta_id, _kurum_id, _para_id, _onay_id) {
        //kurumun verdiği teklif id lerini içeren temp oluştur
        return result.dbQ.exists(result.kp.temp.ssetTahtaKurumTeklifleri(_tahta_id, _kurum_id))
            .then(function (_iExist) {
                if (_iExist) {
                    return 1;
                } else {
                    return result.dbQ.sinterstore(result.kp.temp.ssetTahtaKurumTeklifleri(_tahta_id, _kurum_id),
                        result.kp.kurum.ssetTeklifleri(_kurum_id),
                        result.kp.tahta.ssetTeklifleri(_tahta_id, true));
                }
            })
            .then(function () {
                if (_para_id && _para_id > 0 && _para_id != null) {
                    //teklif tarihine göre x para birimli kurum teklifleri temp i oluştur
                    var anahtar = result.kp.temp.zsetKurumTeklifleriParaBirimli(_tahta_id, _kurum_id, _para_id);
                    return result.dbQ.exists(anahtar)
                        .then(function (_iExist) {
                            if (_iExist) {
                                return 1;
                            } else {
                                return result.dbQ.zinterstore(anahtar, 2, result.kp.temp.ssetTahtaKurumTeklifleri(_tahta_id, _kurum_id), result.kp.teklif.ssetTeklifParaBirimli(_para_id))
                            }
                        });
                } else {
                    return 1;
                }
            })
            .then(function () {
                if (_onay_id && _onay_id > 0 && _onay_id != null) {
                    //teklif tarihine göre x onay durumlu kurum teklifleri temp i oluştur
                    var anahtar = result.kp.temp.zsetKurumTeklifleriOnayDurumunaGore(_tahta_id, _kurum_id, _onay_id);
                    return result.dbQ.exists(anahtar)
                        .then(function (_iExist) {
                            if (_iExist) {
                                return 1;
                            } else {
                                return result.dbQ.zinterstore(anahtar, 2, result.kp.temp.ssetTahtaKurumTeklifleri(_tahta_id, _kurum_id), result.kp.teklif.ssetTeklifOnayDurumlari(_onay_id))
                            }
                        });
                } else {
                    return 1;
                }
            })
            .then(function () {
                return result.dbQ.smembers(result.kp.temp.ssetTahtaKurumTeklifleri(_tahta_id, _kurum_id));
            });
    }
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;
            });
    }
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 [];
        }
    }
272887
function f_tahta_kalem_idler_aktif(_tahta_id) {
        var db_ihale = require('./db_ihale'),
            defer = result.dbQ.Q.defer(),
            anahtar = result.kp.temp.ssetTahtaKalem(_tahta_id);

        result.dbQ.exists(anahtar)
            .then(function (_dbReply) {
                if (_dbReply == 1) {
                    //anahtar var yeniden oluşturmuyoruz

                } else {
                    //anahtar yok
                    //önce tahtanın aktif ihale id leri çekilir
                    //bu ihalelere bağlı kalemler temp.kalem.tumu setine eklenir
                    //aynı şekilde ezilen gizlenen kalemler istenmeyenler setine eklenir
                    //sonuçta kullanıcının göreceği set bu iki setin farkı olacaktır
                    db_ihale.f_db_tahta_ihale_idler_aktif(_tahta_id)
                        .then(function (_ihale_idler) {

                            var arrKalemKeys = [],
                                anahtarTumu = result.kp.temp.ssetTahtaKalemTumu(_tahta_id),
                                anahtarIstenmeyen = result.kp.temp.ssetTahtaKalemIstenmeyen(_tahta_id);

                            _ihale_idler.forEach(function (_elm) {
                                arrKalemKeys.push(result.kp.tahta.ssetOzelKalemleri(_tahta_id, _elm, true), result.kp.ihale.ssetKalemleri(_elm));
                            });
                            arrKalemKeys.unshift(anahtarTumu);

                            result.dbQ.Q.all([
                                result.dbQ.sunionstore_array(arrKalemKeys),
                                result.dbQ.sunionstore(anahtarIstenmeyen, result.kp.tahta.ssetEzilenKalemleri(_tahta_id), result.kp.tahta.ssetGizlenenKalemleri(_tahta_id))
                            ]).then(function () {
                                result.dbQ.sdiffstore(anahtar, anahtarTumu, anahtarIstenmeyen)
                            });
                        });
                }
            })
            .then(function () {
                result.dbQ.smembers(anahtar)
                    .then(function (_kalem_idler) {
                        defer.resolve(_kalem_idler);
                    });
            });

        return defer.promise;
    }
762001
function f_temp_sil_ihale(_tahta_id) {
    if (_tahta_id) {
        return db.redis.dbQ.Q.all([
            db.redis.dbQ.del(db.redis.kp.temp.ssetTahtaIhale(_tahta_id)),
            db.redis.dbQ.del(db.redis.kp.temp.ssetTahtaAnahtarIhaleleri(_tahta_id)),
            db.redis.dbQ.del(db.redis.kp.temp.zsetTahtaIhaleSiraliIhaleTarihineGore(_tahta_id)),
            db.redis.dbQ.del(db.redis.kp.temp.zsetTahtaAnahtaraGoreSiraliIhaleTarihineGore(_tahta_id))
        ]);
    } else {
        return null;
    }
}
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)
        ]);
    }
810161
function f_rol_sil_tumu(_tahta_id, _kul_id) {
        return result.dbQ.smembers(result.kp.tahta.ssetOzelTahtaRolleri(_tahta_id, true))
            .then(function (_rol_idler) {
                if (_rol_idler && _rol_idler.length > 0) {
                    return _rol_idler.map(function (_id) {
                        return f_rol_sil_tahta(_tahta_id, _id, _kul_id);
                    });
                }
            });
    }
26368
function f_kalem_gizlenen_sil(_tahta_id, _kalem_id) {

        return result.dbQ.srem(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_IPTAL, _kalem_id, _ihale_id, _tahta_id);
                        return _kalem_id;
                    });
            });
    }
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);
                            });
                        }
                    });
            });
    }
1021594
function f_aktif_kalem_idler(_ihale_id, _tahta_id) {
        var defer = result.dbQ.Q.defer();

        result.dbQ.Q.all([
                result.dbQ.sunion(result.kp.ihale.ssetKalemleri(_ihale_id), result.kp.tahta.ssetOzelKalemleri(_tahta_id, _ihale_id, true)),
                result.dbQ.sunion(result.kp.tahta.ssetOzelKalemleri(_tahta_id, _ihale_id, false), result.kp.tahta.ssetEzilenKalemleri(_tahta_id), result.kp.tahta.ssetGizlenenKalemleri(_tahta_id))
            ])
            .then(function (_arrDbReplies) {
                var aktifler = _arrDbReplies[0],
                    pasifler = _arrDbReplies[1];
                defer.resolve(aktifler.differenceXU(pasifler));

            })
            .fail(function (_err) {
                l.e("Kalemler çekilirken hata oldu: " + _err);
                defer.reject(_err)
            });
        return defer.promise;
    }
577475
function f_tahta_kalem_takip_sil(_tahta_id, _kalem_id) {
        return result.dbQ.srem(result.kp.tahta.ssetTakiptekiKalemleri(_tahta_id), _kalem_id);
    }