Uyarıyı güncelle
@param {integer} _tahta_id
@param {object} _uyari
@returns {*}
324895
function f_uyari_guncelle(_tahta_id, _uyari) {
        return result.dbQ.hset(result.kp.uyari.tablo, _uyari.Id, JSON.stringify(_uyari))
            .then(function () {
                //uyarının durumuna göre (true/false) sete ekleyeceğiz
                //durumu false olanları pasifler setine ekleyeceğiz
                //değilse setten çıkar
                if (_uyari.Durumu == false) {
                    return result.dbQ.sadd(result.kp.uyari.ssetPasif, _uyari.Id);
                } else {
                    return result.dbQ.srem(result.kp.uyari.ssetPasif, _uyari.Id);
                }
            })
            .then(function () {
                return f_uyari_id(_uyari.Id, _tahta_id)
            });
    }
148628
function f_gorev_guncelle(kul_id, id) {
        return result.dbQ.zadd(result.kp.kullanici.zsetGorev(kul_id, false, true), new Date().getTime(), id);
    }
758711
function f_uyari_calistir(_uyari) {

        function Uyari(_uyarim) {
            this.alert = _uyarim;
            this.alert.RENDER = {
                Uyeler: {
                    mail_listesi: [],
                    gsm_listesi: [],
                    id_listesi: [],
                    uye_listesi: []
                },
                Sonuc: {
                    Toplam: 0,
                    Data: []
                },
                ElasticQuery: {},
                Tipi: "",
                Hata: []
            };
        }

        //region ELASTİC SORGUSUNU HAZIRLA
        Uyari.prototype.f_ES_hazirla_ihale_tarihine_x_gun_kala = function () {
            var alert = this.alert;
            l.info("-----------f_ES_hazirla_ihale_tarihine_x_gun_kala----------------" + alert.Olay);

            if (alert.Kriterler && alert.Kriterler.length > 0) {
                var bugun = new Date(),
                    gun = bugun.getDate(),
                    ay = bugun.getMonth(),
                    yil = bugun.getFullYear(),
                    tarih = new Date(yil, ay, gun),
                    kriter = alert.Kriterler[0],
                    baslangic_tarihi = null,
                    bitis_tarihi = null;

                if (kriter.Prop == "Gun") {
                    baslangic_tarihi = tarih.f_addDays(kriter.Value);
                    bitis_tarihi = baslangic_tarihi.f_addDays(1);
                } else if (kriter.Prop == "Ay") {
                    baslangic_tarihi = tarih.f_addDays(parseInt(kriter.Value) * 30);
                    bitis_tarihi = baslangic_tarihi.f_addDays(1);
                }

                var tipi = f_elastic_tipi(alert.Olay);
                alert.RENDER.Tipi = tipi;

                var db_ihale = require('./db_ihale');
                return db_ihale.f_db_tahta_ihale_idler_aktif(alert.Tahta_Id)
                    .then(function (_idler) {
                        if (_idler && _idler != null) {

                            var sorgu = {
                                "query": {
                                    "filtered": {
                                        "query": {
                                            "bool": {
                                                "must": [
                                                    {
                                                        "ids": {
                                                            "type": tipi,
                                                            "values": _idler.map(function (e) {
                                                                return e.toString()
                                                            })
                                                        }
                                                    }
                                                ]
                                            }
                                        },
                                        "filter": {
                                            "bool": {
                                                "must": [
                                                    {
                                                        "range": {
                                                            "IhaleTarihi": {
                                                                "gte": baslangic_tarihi.getTime(),
                                                                "lte": bitis_tarihi.getTime()
                                                            }
                                                        }
                                                    }
                                                ]
                                            }
                                        }
                                    }
                                }
                            };
                            alert.RENDER.ElasticQuery = sorgu;
                            return sorgu;
                        } else {
                            alert.RENDER.ElasticQuery = null;
                            return null;
                        }
                    });
            }
            else {
                return null;
            }
        };
        Uyari.prototype.f_ES_hazirla_kalem_durumuna_gore = function () {
            //önce tahtanın görebileceği kalem_idlerini buluyoruz
            //sonra bu idlere göre onay durumu uyarıda ne tanımlandı ise ona uygun kalemleri içeren elastic sorgu oluşturuyoruz

            var alert = this.alert,
                tipi = f_elastic_tipi(alert.Olay),
                onay_durum_id = f_kalem_onay_durum_idsi(alert.Olay);
            l.info("------------------ f_ES_hazirla_kalem_durumuna_gore -------------- > " + alert.Olay);
            alert.RENDER.Tipi = tipi;

            var db_kalem = require('./db_kalem');
            return db_kalem.f_db_tahta_kalem_idler_aktif(alert.Tahta_Id)
                .then(function (_idler) {
                    if (_idler && _idler != null) {

                        var sorgu = {
                            "query": {
                                "filtered": {
                                    "query": {
                                        "bool": {
                                            "must": [
                                                {
                                                    "ids": {
                                                        "type": tipi,
                                                        "values": _idler.map(function (e) {
                                                            return e.toString()
                                                        })
                                                    }
                                                }
                                            ]
                                        }
                                    },
                                    "filter": {
                                        "bool": {
                                            "must": [
                                                {
                                                    "term": {"OnayDurumu.Id": onay_durum_id}
                                                }
                                            ]
                                        }
                                    }
                                }
                            }
                        };

                        alert.RENDER.ElasticQuery = sorgu;
                        return sorgu;
                    } else {
                        alert.RENDER.ElasticQuery = null;
                        return null;
                    }
                });
        };
        Uyari.prototype.f_ES_hazirla_teklif_durumuna_gore = function () {
            //önce tahtanın görebileceği teklif idleri buluyoruz
            //sonra bu idlere göre onay durumu uyarıda ne tanımlandı ise ona uygun teklifleri içeren elastic sorgu oluşturuyoruz

            var alert = this.alert,
                tipi = f_elastic_tipi(alert.Olay),
                onay_durum_id = f_teklif_onay_durum_idsi(alert.Olay);
            l.info("------------------ f_ES_hazirla_teklif_durumuna_gore -------------- > " + alert.Olay);
            alert.RENDER.Tipi = tipi;

            var db_tahta = require('./db_tahta');
            return db_tahta.f_db_tahta_teklif_idleri(alert.Tahta_Id)
                .then(function (_idler) {
                    if (_idler && _idler != null) {

                        var sorgu = {
                            "query": {
                                "filtered": {
                                    "query": {
                                        "bool": {
                                            "must": [
                                                {
                                                    "ids": {
                                                        "type": tipi,
                                                        "values": _idler.map(function (e) {
                                                            return e.toString()
                                                        })
                                                    }
                                                }
                                            ]
                                        }
                                    },
                                    "filter": {
                                        "bool": {
                                            "must": [
                                                {
                                                    "term": {"Id": onay_durum_id}
                                                }
                                            ]
                                        }
                                    }
                                }
                            }
                        };
                        l.info("elastic SORGUMM > " + JSON.stringify(sorgu));
                        alert.RENDER.ElasticQuery = sorgu;
                        return sorgu;
                    } else {
                        alert.RENDER.ElasticQuery = null;
                        return null;
                    }
                });
        };
        Uyari.prototype.f_ES_hazirla_diger = function () {
            var alert = this.alert,
                tipi = f_elastic_tipi(alert.Olay);
            l.info("------------------ f_ES_hazirla_diger -------------- > " + alert.Olay);
            alert.RENDER.Tipi = tipi;

            return f_nesne_idleri(alert.Olay, alert.Tahta_Id)
                .then(function (_idler) {
                    if (_idler != null) {
                        var query = f_elastic_filter(_idler, alert, alert.RENDER.Tipi);
                        alert.RENDER.ElasticQuery = query;
                        return query;
                    } else {
                        alert.RENDER.ElasticQuery = null;
                        return null;
                    }
                });
        };
        Uyari.prototype.f_ES_hazirla = function () {
            var promise = null,
                alert = this.alert;

            l.info("------------------ f_ES_hazirla -------------- > " + alert.Olay);

            //bazı uyarıların ElasticQuery değeri oluşturulmamış olabilir.
            //örneğin kalem:durum:katılıyoruz, ihale:tarih:x:gun:kala...
            //bu durumda elastic sorgusunu diğerlerinde göre daha farklı oluşturmalıyız

            switch (alert.Olay) {
                case schema.SABIT.OLAY.IHALE_TARIHI_X_GUN_KALA:
                    promise = this.f_ES_hazirla_ihale_tarihine_x_gun_kala();
                    break;

                case schema.SABIT.OLAY.KALEM_KATILIYORUZ:
                case schema.SABIT.OLAY.KALEM_ITIRAZ_EDILECEK:
                case schema.SABIT.OLAY.KALEM_ITIRAZ_EDILDI:
                case schema.SABIT.OLAY.KALEM_ITIRAZ_KABUL:
                case schema.SABIT.OLAY.KALEM_ITIRAZ_RED:
                case schema.SABIT.OLAY.KALEM_IPTAL:
                    promise = this.f_ES_hazirla_kalem_durumuna_gore();
                    break;

                case schema.SABIT.OLAY.TEKLIF_IHALEDEN_ATILDI:
                case schema.SABIT.OLAY.TEKLIF_IPTAL:
                case schema.SABIT.OLAY.TEKLIF_KAZANDI:
                case schema.SABIT.OLAY.TEKLIF_URUN_BELGESI_EKSIK:
                case schema.SABIT.OLAY.TEKLIF_URUNU_REDDEDILDI:
                    promise = this.f_ES_hazirla_teklif_durumuna_gore();
                    break;

                default:
                    promise = this.f_ES_hazirla_diger();
                    break;
            }

            return promise;
        };
        //endregion

        //region ELASTİC SORGULA
        Uyari.prototype.f_ES_query = function () {
            var alert = this.alert,
                defer = result.dbQ.Q.defer();
            l.info("------------------ f_ES_sorgula -------------- > " + alert.Olay);
            console.log("alert.RENDER.ElasticQuery>" + JSON.stringify(alert.RENDER.ElasticQuery))

            if (alert.RENDER.ElasticQuery != null) {
                elastic.f_search({
                    method: "POST",
                    index: schema.SABIT.ELASTIC.INDEKS.APP,
                    type: alert.RENDER.Tipi,
                    body: alert.RENDER.ElasticQuery
                }).then(function (_resp) {

                    alert.RENDER.Sonuc.Toplam = _resp[0].hits.total;
                    alert.RENDER.Sonuc.Data = _.map(_resp[0].hits.hits, "_source");

                    defer.resolve(_resp[0]);
                });
            } else {
                var hata = {id: 0, mesaj: "Elastic sorgusu oluşturulamadı!"};
                alert.RENDER.Hata.push(hata);
                defer.reject(hata);
            }

            return defer.promise;
        };
        //endregion

        //region UYARI KİŞİLERİNİ HAZIRLA
        Uyari.prototype.f_uyari_uyelerini_hazirla = function () {
            l.info("f_uyari_uyelerini_hazirla");
            var defer = result.dbQ.Q.defer(),
                alert = this.alert;

            //uyarı gönderilecek kişileri bul
            if (alert.Uye_Idler && alert.Uye_Idler.length > 0) {

                alert.RENDER.Uyeler.id_listesi.push(alert.Uye_Idler);

                var db_kullanici = require('./db_kullanici');
                db_kullanici.f_db_uye_id(alert.Uye_Idler, alert.Tahta_Id)
                    .then(function (_uyeler) {
                        if (_uyeler && _uyeler.length > 0) {
                            //üye bilgilerini topla

                            alert.RENDER.Uyeler.uye_listesi = _uyeler;
                            alert.RENDER.Uyeler.mail_listesi = _uyeler.pluckX("EPosta");
                            alert.RENDER.Uyeler.gsm_listesi = _uyeler.pluckX("GSM");

                            console.log("alert.RENDER.Uyeler>" + JSON.stringify(alert.RENDER.Uyeler));
                            defer.resolve(alert.RENDER.Uyeler);

                        } else {
                            defer.resolve(null);
                        }

                        /*   var arrPromises = _uyeler.map(function (_uye) {
                         if (_uye) {

                         alert.RENDER.Uyeler.uye_listesi.push(_uye);

                         if (_uye.EPosta) {
                         alert.RENDER.Uyeler.mail_listesi.push(_uye.EPosta);
                         }

                         if (_uye.GSM) {
                         alert.RENDER.Uyeler.gsm_listesi.push(_uye.GSM);
                         }
                         }
                         return _uye;
                         });

                         result.dbQ.Q.all(arrPromises)
                         .then(function () {
                         console.log("alert.RENDER.Uyeler>" + JSON.stringify(alert.RENDER.Uyeler));
                         defer.resolve(alert.RENDER.Uyeler);
                         });*/
                    });

            } else {
                console.log("alert.RENDER.Uyeler>" + JSON.stringify(alert.RENDER.Uyeler));
                defer.resolve(alert.RENDER.Uyeler);
            }

            return defer.promise;
        };
        Uyari.prototype.f_uyari_rollerini_hazirla = function () {
            l.info("f_uyari_rollerini_hazirla");
            var defer = result.dbQ.Q.defer(),
                alert = this.alert;
            /*
             * Uyarı gönderilecek rol tanımlanmışsa
             * O role sahip üyeleri çekmeli ardından bulunan üyelere mail,sms..vb göndermeliyiz
             * */
            if (alert.Rol_Idler && alert.Rol_Idler.length > 0) {

                f_role_bagli_uyeler(alert.Tahta_Id, alert.Rol_Idler, alert)
                    .then(function () {
                        console.log("alert.RENDER.Uyeler>" + JSON.stringify(alert.RENDER.Uyeler));
                        defer.resolve(alert.RENDER.Uyeler);
                    });

            } else {
                //defer.reject({id: 0, mesaj: "roller dizisi gelmedi"});
                console.log("alert.RENDER.Uyeler>" + JSON.stringify(alert.RENDER.Uyeler));
                defer.resolve(alert.RENDER.Uyeler);
            }

            return defer.promise;
        };
        Uyari.prototype.f_uyari_kisilerini_hazirla = function () {
            l.info("f_uyari_kisilerini_hazirla");
            var defer = result.dbQ.Q.defer(),
                alert = this.alert;

            if (alert.RENDER.ElasticQuery != null) {
                //uyarı gönderilecek kişileri bul

                var self = this;
                result.dbQ.Q.all([
                    self.f_uyari_uyelerini_hazirla(),
                    self.f_uyari_rollerini_hazirla()
                ]).then(function () {
                    defer.resolve(alert.RENDER.Uyeler);
                });

            } else {
                var hata = {id: 0, alert: alert, mesaj: "Elastic sorgusu oluşturulamadı!"};
                alert.RENDER.Hata.push(hata);
            }

            return defer.promise;
        };
        //endregion

        //region UYARI İŞLEMLERİNİ TETİKLE
        Uyari.prototype.f_uyari_yapilacak_islemleri_tetikle = function () {
            l.info("f_uyari_yapilacak_islemleri_tetikle");

            var defer = result.dbQ.Q.defer(),
                alert = this.alert;

            l.info("alert.RENDER.Sonuc>" + JSON.stringify(alert.RENDER.Sonuc));

            if (alert.RENDER.Sonuc.Toplam > 0) {
                //hangi işlemler tanımlandı ise kişilere uygulayacağız

                var arrPromiseIslemler = alert.Islemler.map(function (_islem) {
                    if (_islem == schema.SABIT.UYARI.MAIL) {
                        //mail seçilmiş tüm kişilere mail at
                        if (alert.RENDER.Uyeler.mail_listesi.length > 0) {
                            return f_mail_secildi(alert);
                        } else {
                            alert.RENDER.Hata.push({id: 0, alert: alert, mesaj: "Uyarı gönderilecek üye bilgisi olmadığı için mail gönderilemedi!"});
                        }
                    }
                    else if (_islem == schema.SABIT.UYARI.SMS) {
                        //sms gönderilmesi istenmiş
                        //_kullanicilar.gsm_listesi;
                        return null;
                    }
                    else if (_islem == schema.SABIT.UYARI.ALERT) {
                        //kullanıcı giriş yaptığında haberlerinde göstereceğiz

                        if (alert.RENDER.Uyeler.id_listesi.length > 0) {
                            return f_alert_secildi(alert);
                        } else {
                            alert.RENDER.Hata.push({id: 0, alert: alert, mesaj: "Uyarı gönderilecek üye bilgisi olmadığı için alert eklenemedi!"});
                        }
                    }
                    else if (_islem == schema.SABIT.UYARI.TODO) {
                        //kullanıcının yapılacaklar (to-do) listesine iş düşür
                        if (alert.RENDER.Uyeler.id_listesi.length > 0) {
                            return f_todo_secildi(alert);
                        } else {
                            alert.RENDER.Hata.push({id: 0, alert: alert, mesaj: "Uyarı gönderilecek üye bilgisi olmadığı için GÖREV eklenemedi!"});
                        }
                    }
                });
                result.dbQ.Q.all(arrPromiseIslemler)
                    .then(function () {
                        console.log("uyarılar gönderildi");
                        defer.resolve("uyarılar gönderildi");
                    })
                    .fail(function (_err) {
                        console.log("uyarılar gönderilemedi.HATA>" + _err);
                        defer.reject({id: 0, mesaj: "Uyarılar gönderilemedi! HATA: " + _err});
                    });
            } else {
                var hata = {id: 0, alert: alert, mesaj: "Elastic sonucunda kritere uygun kayıt bulunamadı!"};
                alert.RENDER.Hata.push(hata);
                defer.reject({id: 0, mesaj: "Elastic sonucunda kritere uygun kayıt bulunamadı!"});
            }

            return defer.promise;
        };
        //endregion

        //region GOOGLE TAKVİME EKLE
        Uyari.prototype.f_uyariyi_google_takvime_ekle = function () {
            l.info("f_google_takvime_ekle");
            var defer = result.dbQ.Q.defer(),
                alert = this.alert;


            //gelen uyarı to-do (görev) şeklinde tanımlandı ise ve tipi ihale ise
            //ihale bilgilerine göre google takvime ekliyoruz
            var todo = alert.Islemler.filter(function (_elm) {
                return _elm == schema.SABIT.UYARI.TODO;
            });

            if (todo && todo.length > 0) {
                if (alert.RENDER.Tipi.indexOf(schema.SABIT.TABLO_ADI.IHALE) != -1) {
                    //bu kayıtlı uyarı ihale işlemi
                    //google calendar a eklemeye başla
                    l.info("******google calendar a eklemeye başla************");

                    /** @type {OptionsTahta} */
                    var opt = {};
                    opt.bAnahtarlari = false;
                    opt.bGenel = true;
                    opt.bKurumu = false;
                    opt.bRolleri = false;
                    opt.bUyeleri = false;
                    opt.bAjanda = true;

                    var db_tahta = require('./db_tahta');

                    db_tahta.f_db_tahta_id(alert.Tahta_Id, opt)
                        .then(function (_dbTahta) {
                            l.info("******tahtanın google ajandası************" + JSON.stringify(_dbTahta.Ajanda.GC));
                            if (_dbTahta.Ajanda.GC && _dbTahta.Ajanda.GC.Id) {
                                l.info("******tahtanın google ajandası seçilmiş************");
                                alert.RENDER.Uyeler.uye_listesi.forEach(function (_elm) {
                                    if (_elm.Providers.GP && _elm.Providers.GP.token) {
                                        l.info("******kullanıcının token ı var************" + _elm.Providers.GP.token);
                                        f_google_takvime_ekle(_elm, _dbTahta, _elm)
                                            .then(function (_res) {
                                                defer.resolve(_res);
                                            });
                                    }
                                    defer.resolve(null);
                                });
                            }
                            defer.resolve(null);
                        });
                }
                else {
                    defer.resolve(null);
                }
            }
            else {
                defer.resolve(null);
            }

            return defer.promise;
        };
        //endregion

        //region KUYRUKTAN SİL
        Uyari.prototype.f_kuyruktan_sil = function () {
            l.info("f_kuyruktan_sil");
            var defer = result.dbQ.Q.defer(),
                alert = this.alert;
            defer.resolve("başarılı");
            return defer.promise;
        };
        //endregion

        Uyari.prototype.f_calis = function () {
            var self = this;

            return self.f_ES_hazirla()
                .then(function () {
                    return self.f_ES_query();
                })
                .then(function () {
                    return self.f_uyari_kisilerini_hazirla();
                })
                .then(function () {
                    return self.f_uyari_yapilacak_islemleri_tetikle();
                })
                .then(function () {
                    return self.f_uyariyi_google_takvime_ekle()
                })
                .then(function () {
                    return self.f_kuyruktan_sil();
                })
                .then(function () {
                    l.info("uyarı çalıştı");
                    return "uyarı çalıştı";
                })
                .fail(function (_err) {
                    if (_err.id != 100) {
                        // hata oluştu logla
                    }
                    l.e(self.alert.Olay + " için f_calis metodunda hata alındı: " + _err);
                    l.e(_err);
                });
        };

        var uyari = new Uyari(_uyari);
        return uyari.f_calis();
    }
1158192
function f_tahta_kurum_gizlenen_ekle(_tahta_id, _kurum_id) {
        return result.dbQ.sadd(result.kp.tahta.ssetGizlenenKurumlari(_tahta_id), _kurum_id)
            .then(function () {
                emitter.emit(schema.SABIT.OLAY.KURUM_GIZLENDI, _kurum_id, _tahta_id);
                return _kurum_id;
            });
    }
1109025
function f_yapan_kurum_guncelle(ihale_id, kurum_id) {
        return result.dbQ.hset(result.kp.ihale.hsetYapanKurumlari, ihale_id, kurum_id)
            .then(function () {
                return f_yapan_kurum(ihale_id);
            });
    }
1320827
function f_role_bagli_uyeler(_tahta_id, _rol_ids, _uyari) {
        //o role sahip üyeleri çekeceğiz
        l.info("---------f_role_bagli_uyeler-----------")

        var db_tahta = require('./db_tahta');

        var defer = result.dbQ.Q.defer(),
            arrPromise = _rol_ids.map(function (_elm) {
                return db_tahta.f_db_tahta_uyeleri_x_rolune_sahip(_tahta_id, _elm)
                    .then(function (_uyeler) {

                        _uyeler.map(function (_uye) {
                            if (_uye.EPosta) {
                                _uyari.RENDER.Uyeler.mail_listesi.push(_uye.EPosta);
                            }

                            if (_uye.GSM) {
                                _uyari.RENDER.Uyeler.gsm_listesi.push(_uye.GSM);
                            }

                            _uyari.RENDER.Uyeler.id_listesi.push(_uye.Id);
                            _uyari.RENDER.Uyeler.uye_listesi.push(_uye);
                            return _uyari;
                        });
                    });
            });

        result.dbQ.Q.all(arrPromise)
            .then(function () {
                defer.resolve(_uyari.RENDER.Uyeler);
            });

        return defer.promise;
    }
809676
function f_tahtanin_takipteki_ihale_idleri(_tahta_id) {

        return result.dbQ.smembers(result.kp.tahta.ssetTakiptekiIhaleleri(_tahta_id))
            .then(function (_takipteki_ihale_idler) {

                //herhangibir kayıt yoksa boş dizi dönüyoruz
                if (!_takipteki_ihale_idler || _takipteki_ihale_idler.length == 0) {
                    return [];
                }

                return f_tahta_ihale_idler_aktif(_tahta_id)
                    .then(function (_aktif_ihale_idler) {
                        return _.intersection(_aktif_ihale_idler, _takipteki_ihale_idler);
                    });
            });
    }
1297006
function f_kalem_ihalesi(_kalem_id, _tahta_id) {
        return result.dbQ.hget(result.kp.kalem.hsetIhaleleri, _kalem_id)
            .then(function (_ihale_id) {
                /** @type {DBIhale} */
                var db_ihale = require('./db_ihale');

                /** @type {OptionsIhale} */
                var opts = {};
                opts.bArrKalemleri = false;
                opts.bTakip = false;
                opts.bYapanKurum = true;

                return db_ihale.f_db_ihale_id(_ihale_id, _tahta_id, opts);
            })
    }
242635
function f_urun_anahtar_tumu(_urun_id, _tahta_id) {
        console.log("f_db_urun_anahtar_tumu");
        return (Array.isArray(_urun_id)
            ? _urun_id.mapX(null, f_urun_anahtar_bilgisi, _tahta_id).allX()
            : f_urun_anahtar_bilgisi(_urun_id, _tahta_id));

        function f_urun_anahtar_bilgisi(_dbUrun_id, _tahta_id) {
            return result.dbQ.zrangebyscore([result.kp.urun.zsetAnahtarKelimeleri(_tahta_id, _dbUrun_id), '-inf', '+inf'])
                .then(
                    /**
                     *Ürünle ilişkili anahtarlar dizisi
                     * @param {string[]} _arr_anahtar_kelimeler
                     * @returns {Array|AnahtarKelime[]}
                     */
                    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 [];
                        }
                    });
        }
    }
909632
function f_urun_teklif_kontrol(_tahta_id, _urun_id) {
        return result.dbQ.smembers(result.kp.urun.ssetTeklifleri(_tahta_id, _urun_id));
    }
955537
function f_kurumla_iliskili_teklif_templerini_sil(_teklif, _tahta_id) {
    return [
        db.redis.dbQ.del(db.redis.kp.temp.zsetKurumTeklifleriParaBirimli(_tahta_id, _teklif.Kurum_Id, _teklif.ParaBirim_Id)),
        db.redis.dbQ.del(db.redis.kp.temp.zsetKurumTeklifleriOnayDurumunaGore(_tahta_id, _teklif.Kurum_Id, _teklif.TeklifDurumu_Id)),
        db.redis.dbQ.del(db.redis.kp.temp.ssetTahtaKurumTeklifleri(_tahta_id, _teklif.Kurum_Id))
    ].allX();
}
640437
function (_ihale_id, _kalem, _tahta_id) {
        console.log("f_db_kalem_index");

        function f_indexle(_tahta_id, _ihale_id, _kalem) {
            console.log(_kalem);

            return db.tahta.f_db_tahta_anahtar_tumu(_tahta_id)
                .then(
                    /**
                     *
                     * @param {AnahtarKelime[]} _arrKelimeler
                     * @returns {*}
                     */
                    function (_arrKelimeler) {
                        if (_arrKelimeler && _arrKelimeler.length > 0) {

                            _.some(_arrKelimeler, function (_elm) {
                                var anahtar = _elm.Anahtar.turkishToLower();
                                if ((_kalem.Aciklama && _kalem.Aciklama.turkishToLower().indexOf(anahtar) > -1) ||
                                    (_kalem.BransKodu && _kalem.BransKodu.turkishToLower().indexOf(anahtar) > -1)) {

                                    console.log("bulunan");
                                    console.log("açıklama:" + _kalem.Aciklama);
                                    console.log("branş:" + _kalem.BransKodu);

                                    return db.redis.dbQ.Q.all([
                                        db.anahtar.f_db_anahtar_index_ekle_kalem(_elm.Id, _kalem.Id),
                                        db.anahtar.f_db_anahtar_index_ekle_ihale(_elm.Id, _ihale_id)
                                    ]);
                                }
                            });

                        } else {
                            return _kalem;
                        }
                    })
                .then(function () {
                    return _kalem;
                });
        }

        if (_tahta_id && _tahta_id > 0) {
            //tahtaya g�re index olu�tur
            f_indexle(_tahta_id, _ihale_id, _kalem);

        } else {

            //t�m tahtalar� �ek
            return db.tahta.f_db_tahta_tumu()
                .then(function (_arrTahtalar) {
                    console.log("tahtalar");

                    //her biri i�inde d�n�p �r�n�n/kurumun/tahtan�n/kullan�c�n�n anahtarlar�na ba�l� sat�rlar� varsa ihale_id yi yaz ve indexle
                    var arrPromises = _.map(_arrTahtalar, function (_dbTahta) {
                        console.log("tahtalar i�inde d�n�yoruz");

                        console.log(_kalem);
                        return f_indexle(_dbTahta.Id, _ihale_id, _kalem)
                            .then(function () {
                                return _kalem;
                            });
                    });

                    return db.redis.db.dbQ.Q.all(arrPromises);
                })
                .then(function (_arr) {
                    console.log(_arr);
                    return _arr;
                });
        }
    }
1338918
function f_uye_id(_uye_id, _tahta_id, _opts) {
        // 1. Temel Tahta Üye bilgileri
        // 2. Tahtadaki rolleri


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

        return (Array.isArray(_uye_id)
            ? result.dbQ.hmget_json_parse(result.kp.kullanici.tablo, _uye_id)
            : result.dbQ.hget_json_parse(result.kp.kullanici.tablo, _uye_id))
            .then(function (_dbUye) {
                if (!_dbUye) {
                    return null;
                }

                function f_uye_bilgileri(_uye) {
                    /** @type {Uye} */
                    var olusan_uye = schema.f_create_default_object(schema.SCHEMA.UYE);

                    _.extend(olusan_uye, _uye);

                    if (_tahta_id) {
                        //tahtaya bağlı üyelerin rollerini bul
                        return [
                            opts.bArrTahtaUyeRolId
                                ? result.dbQ.hget_json_parse(result.kp.tahta.hsUyeleri(_tahta_id), _uye.Id)
                                : []]
                            .allX()
                            .then(function (_dbReplies) {
                                olusan_uye.Roller = _dbReplies[0];
                                return olusan_uye;
                            });
                    } else {
                        return olusan_uye;
                    }
                }

                return (Array.isArray(_dbUye)
                    ? _dbUye.map(f_uye_bilgileri).allX()
                    : f_uye_bilgileri(_dbUye))
                    .then(function (_olusan_uye) {
                        return _olusan_uye;
                    });
            });


        /* /!** @type {Uye} *!/
         var uye = schema.f_create_default_object(schema.SCHEMA.UYE);

         return [
         // 1
         opts.bTemelTahtaUyeBilgileri
         ? result.dbQ.hget_json_parse(result.kp.kullanici.tablo, _uye_id)
         : null,
         // 2
         opts.bArrTahtaUyeRolId && _tahta_id
         ? result.dbQ.hget_json_parse(result.kp.tahta.hsUyeleri(_tahta_id), _uye_id)
         : null]
         .allX()
         .then(function (_dbReplies) {
         extension.ssg = [{"_dbReplies": _dbReplies}];
         // 1
         _.extend(uye, _dbReplies[0]);

         // 2
         uye.Roller = _dbReplies[1];

         return uye;
         });*/
    }
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;
    }
562296
function f_kurum_tumu(_tahta_id, _sayfalama) {
        console.log("f_db_kurum_tumu");
        return f_aktif_kurum_idleri(_tahta_id, _sayfalama)
            .then(function (_arrKurumId) {
                var sonucAnahtari = _tahta_id && _tahta_id > 0
                        ? result.kp.temp.ssetTahtaKurum(_tahta_id)
                        : result.kp.temp.ssetKurum,
                    sonuc = schema.f_create_default_object(schema.SCHEMA.LAZY_LOADING_RESPONSE);

                return _arrKurumId.length == 0
                    ? sonuc
                    : result.dbQ.scard(sonucAnahtari)
                    .then(function (_toplamKayitSayisi) {
                        sonuc.ToplamKayitSayisi = _toplamKayitSayisi;

                        return f_kurum_id(_arrKurumId)
                            .then(function (_dbKurumlar) {
                                sonuc.Data = _dbKurumlar;
                                return sonuc;
                            });
                    });
            });
    }
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;
    }
1190073
function f_tahta_uyeleri_x_rolune_sahip(_tahta_id, _rol_id) {
        return f_tahta_uyeleri(_tahta_id)
            .then(
                /**
                 * @param {Uye[]} _uyeler
                 * @returns {Array}
                 */
                function (_uyeler) {
                    return _uyeler.whereXU({Roller: [_rol_id]});
                });
    }