DB de olaylar anahtarı oluşmamışsa yaratılacak
Olay anahtarını başlatıp içine eventleri koyacağız
183128
function f_init_db_olay() {
        // OLAY anahtarı yoksa oluştur ve olayları ekle
        return result.dbQ.exists(result.kp.olay.tablo)
            .then(function (_intVarYok) {
                if (_intVarYok == 0) {
                    /*for (o in OLAY_ADI) {
                     l.info(o + " - " + result.OLAY_ADI[o]);
                     result.dbQ.hset(result.kp.olay.tablo, o, result.OLAY_ADI[o]);
                     }*/
                }
            });
    }
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 [];
                }
            });
    }
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;
        });
    }
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 [];
                        }
                    });
            });
    }
1041368
function f_urun_ekle(_db_urun, _uretici_id, _tahta_id, _kul_id) {
        //l.info("f_db_urun_ekle");

        function f_urun_ekle(_db_urun, _uretici_id, _tahta_id, _kul_id) {
            //SON EKLENEN ürünün İD SİNİ ÇEK VE EKLEME İŞLEMİNE BAŞLA
            //l.info("f_urun_ekle");
            return result.dbQ.incr(result.kp.urun.idx)
                .then(function (_id) {
                    _db_urun.Id = _id;

                    return result.dbQ.hset(result.kp.urun.tablo, _id, JSON.stringify(_db_urun))
                        .then(function () {
                            if (_tahta_id && _tahta_id > 0) {
                                return result.dbQ.sadd(result.kp.tahta.ssetOzelUrunleri(_tahta_id, true), _id);
                            } else {
                                return _db_urun;
                            }
                        })
                        .then(function () {
                            if (_uretici_id && _uretici_id > 0) {

                                return result.dbQ.Q.all([
                                    result.dbQ.sadd(result.kp.kurum.ssetUrunleri(_tahta_id, _uretici_id), _id),
                                    result.dbQ.hset(result.kp.urun.hsetUreticiler, _id, _uretici_id),
                                    f_urun_iliskili_kurum_ekle(_tahta_id, _id, _uretici_id)
                                ])
                            } else {
                                return _db_urun;
                            }
                        })
                        .then(function () {
                            return f_urun_id(_db_urun.Id, _tahta_id)
                                .then(function (_dbUrun) {
                                    emitter.emit(schema.SABIT.OLAY.URUN_EKLENDI, _db_urun, _tahta_id, _kul_id);
                                    return _dbUrun;
                                });
                        });
                });
        }

        return Array.isArray(_db_urun)
            ? _db_urun.mapX(null, f_urun_ekle, _uretici_id, _tahta_id, _kul_id).allX()
            : f_urun_ekle(_db_urun, _uretici_id, _tahta_id, _kul_id);
    }
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;
    }
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;
                });
        }
    }
156426
function f_kullanici_tumu(aktif) {
        if (aktif) {
            return f_aktif_kullanici_idleri()
                .then(function (_idler) {
                    return result.dbQ.hmget_json_parse(result.kp.kullanici.tablo, _idler);

                }).fail(function (err) {
                    l.e("kullanıcılar çekilemedi " + err);
                });

        } else {
            return result.dbQ.smembers(result.kp.kullanici.ssetGenel)
                .then(function (_idler) {
                    return result.dbQ.hmget_json_parse(result.kp.kullanici.tablo, _idler);
                }).fail(function (err) {
                    l.e("kullanıcılar çekilemedi " + err);
                });
        }
    }
914128
function f_kullanici_yetki_tumu(kul_id) {
        return result.dbQ.smembers(result.kp.kullanici.ssetYetkileri(kul_id))
            .then(function (_aktif) {
                return result.dbQ.hmget_json_parse(result.kp.yetki.tablo, _aktif);
            }).fail(function () {
                l.e("tüm kullanıcı yetkileri çekilemedi!");
            });
    }
755364
function f_kurumun_teklifleri_toplam(_tahta_id, _kurum_id, _onay_durum_id, _para_id, _tarih1, _tarih2) {

        if (_onay_durum_id && _onay_durum_id > 0 && _onay_durum_id != null) {
            //gelen onay durumuna bağlı teklif toplamı

            return f_kurumun_teklif_idleri(_tahta_id, _kurum_id, _onay_durum_id, _para_id, _tarih1, _tarih2)
                .then(function (_teklif_idler) {
                    var durum = schema.SABIT.ONAY_DURUM.teklif.whereX("Id", _onay_durum_id).KisaAdi;
                    return [{Durumu: durum, Toplam: _teklif_idler.length}];
                });

        } else {
            //tüm onay durumlarına göre teklif toplamlarını oluştur

            return f_kurumun_teklif_idleri(_tahta_id, _kurum_id, schema.SABIT.ONAY_DURUM.teklif.TEKLIF, _para_id, _tarih1, _tarih2)
                .then(function (_teklif_idler) {
                    return [{Durumu: "Teklif", Toplam: _teklif_idler.length}];
                })
                .then(function (_arr) {
                    return f_kurumun_teklif_idleri(_tahta_id, _kurum_id, schema.SABIT.ONAY_DURUM.teklif.KAZANDI, _para_id, _tarih1, _tarih2)
                        .then(function (_teklif_idler) {
                            _arr.push({Durumu: "Kazandı", Toplam: _teklif_idler.length});
                            return _arr;
                        });
                })
                .then(function (_arr) {
                    return f_kurumun_teklif_idleri(_tahta_id, _kurum_id, schema.SABIT.ONAY_DURUM.teklif.REDDEDILDI, _para_id, _tarih1, _tarih2)
                        .then(function (_teklif_idler) {
                            _arr.push({Durumu: "Reddedildi", Toplam: _teklif_idler.length});
                            return _arr;
                        });
                })
                .then(function (_arr) {
                    return f_kurumun_teklif_idleri(_tahta_id, _kurum_id, schema.SABIT.ONAY_DURUM.teklif.IHALEDEN_ATILDI, _para_id, _tarih1, _tarih2)
                        .then(function (_teklif_idler) {
                            _arr.push({Durumu: "İhaleden Atıldı", Toplam: _teklif_idler.length});
                            return _arr;
                        });
                })
                .then(function (_arr) {
                    console.log("oluşan arr>" + JSON.stringify(_arr));
                    return _arr;
                });
        }
    }
346003
function f_kullanici_id(_kul_id, _opts) {
        // _kul_id yoksa null dön
        if (!_kul_id) {
            return null;
        }
        l.info("f_db_kullanici_id");

        // 1. Temel bilgileri
        // 2. Profil bilgileri
        // 3. Tahta bilgileri
        // 3.1 Tahta ID leri (_opts.Tahtalari.arrTahta_id || f_db_kullanici_tahta_idleri(kul_id) )
        // 3.2 Tahta bilgileri
        // 4. oturum durumu

        /** @type {OptionsKullanici} */
        var opts = result.OptionsKullanici(_opts),
            kul_id = _kul_id;

        return [
            // 1
            result.dbQ.hget_json_parse(result.kp.kullanici.tablo, kul_id),
            // 2
            opts.bProfil
                ? result.dbQ.hget_json_parse(result.kp.kullanici.hsetKullaniciProfilleri, kul_id)
                : null,
            // 3
            opts.bTahtalari
                ? (opts.Tahtalari.arrTahta_id != null ? opts.Tahtalari.arrTahta_id : f_kullanici_tahta_idleri(kul_id))
                : null,
            //4
            opts.bOturumDurumu
                ? f_kullanici_oturum_durumu(parseInt(kul_id))
                : 1
        ].allX()
            .then(function (_dbReplies) {

                if (_dbReplies[0] == null) {
                    //Kullanıcı yok, boş dön
                    return null;
                }

                /** @type {Kullanici} */
                var kullanici = schema.f_create_default_object(schema.SCHEMA.KULLANICI);

                // 1
                _.extend(kullanici, _dbReplies[0]);
                // 2
                kullanici.Profil = _dbReplies[1];

                // 4
                kullanici.OturumDurumu = parseInt(_dbReplies[3]);

                // 3
                var arrKullaniciTahtaIdleri = _dbReplies[2];
                if (Array.isArray(arrKullaniciTahtaIdleri) && arrKullaniciTahtaIdleri.length == 0) {
                    kullanici.Tahtalari = [];
                    return kullanici;
                }

                return arrKullaniciTahtaIdleri
                    .mapX(null, f_kullanici_tahtalari, opts.Tahtalari).allX()
                    .then(function (_arrTahtalari) {
                        kullanici.Tahtalari = _arrTahtalari;

                        return kullanici;
                    });
            })
            .then(function (_dbKullanici) {
                return _dbKullanici;
            });
    }
319918
function f_urunun_teklif_fiyatlari_onay_durumuna_gore(_tahta_id, _urun_id, _onay_durum_id, _parabirim_id) {
        //l.info("f_db_urunun_teklif_fiyatlari_onay_durumuna_gore");

        return f_urun_teklif_temp(_tahta_id, _urun_id, _parabirim_id, _onay_durum_id)
            .then(function () {
                if (_onay_durum_id && _onay_durum_id > 0) {
                    var anahtar1 = result.kp.temp.zsetUrunTeklifleriParaBirimli(_tahta_id, _urun_id, _parabirim_id);
                    var anahtar2 = result.kp.temp.zsetUrunTeklifleriOnayDurumunaGore(_tahta_id, _urun_id, _onay_durum_id);
                    return result.dbQ.zinterstore("temp_utpo", 2, anahtar1, anahtar2)
                        .then(function () {
                            result.dbQ.zrangebyscore("temp_utpo", "-inf", "+inf")
                        });
                } else {
                    return result.dbQ.zrangebyscore(result.kp.temp.zsetUrunTeklifleriParaBirimli(_tahta_id, _urun_id, _parabirim_id), "-inf", "+inf");
                }
            })
            .then(function (_iTeklif_idler) {
                var db_teklif = require('./db_teklif');

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

                return db_teklif.f_db_teklif_id(_iTeklif_idler, _tahta_id, opts)
                    .then(function (_teklifler) {
                        var teklifler = [].concat(_teklifler);

                        //sadece teklif fiyatlarını al
                        //aynı fiyatları yazmaya gerek yok filtrele ve sırala
                        return _.uniq(teklifler.pluckX("Fiyat"), true);
                    });
            });
    }
1024348
function f_tahta_kurum_idleri(_tahta_id) {
        return result.dbQ.smembers(result.kp.tahta.ssetOzelKurumlari(_tahta_id, true));
    }
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;
                    });
                });
    }
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 [];
            }
        });
    }
832319
function f_todo_secildi(_uyari) {

        l.info("f_todo_secildi");

        //bu uyarı için atanmış kullanıcı id lerini çek
        var kullanici_idleri = f_uye_id_array(_uyari);

        return _uyari.RENDER.Sonuc.Data.map(function (_elm) {
                var detay = f_detay_olustur(schema.SABIT.UYARI.TODO, _uyari, _elm);
                return f_uyari_sonucu_ekle(detay)
                    .then(function (_id) {

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

                        //eklenen uyarı sonucunu görevlere ekliyoruz

                        return kullanici_idleri.mapX(null, db_gorev.f_db_gorev_ekle, _id).allX();
                    });
            })
            .allX();

    }
106874
function f_ekle_ihaleDunyasindan(_es_ihale, _db_ihale, _kul_id) {

        //SON EKLENEN İHALENİN İD SİNİ ÇEK VE EKLEME İŞLEMİNE BAŞLA
        /**
         * İhale bize ihaleDunyasi.net den geldi ve bu yüzden rediste
         * HSET ihaleDunyasi ihaleDunyasi.IhaleId  ihaleninJsonHali olarak kaydedilir.
         */

        return result.dbQ.hset(result.kp.ihale.ihaleDunyasi.tablo, _es_ihale.IhaleProviders.IhaleDunyasi.IhaleDunyasiId, _es_ihale.IhaleProviders.IhaleDunyasi.raw)
            .then(function () {
                return f_ekle_genel(_es_ihale, _db_ihale, _kul_id)
            });
    }