Ürünle ilgili temp leri (para birim ve onay durumlarına göre) oluştur
@param {integer} _tahta_id
@param {integer} _urun_id
@param {integer} _para_id
@param {integer=} _onay_durum_id
@returns {*}
435901
function f_urun_teklif_temp(_tahta_id, _urun_id, _para_id, _onay_durum_id) {

        //ürüne verilmiş tüm teklifleri para birimine göre teklif tarihleri ile sette tutuyoruz
        var sonucAnahtari = result.kp.temp.zsetUrunTeklifleriParaBirimli(_tahta_id, _urun_id, _para_id);
        return result.dbQ.zcard(sonucAnahtari)
            .then(function (_iToplam) {
                if (_iToplam == 0) {
                    return result.dbQ.zinterstore(sonucAnahtari, 2,
                        result.kp.urun.ssetTeklifleri(_tahta_id, _urun_id),
                        result.kp.teklif.ssetTeklifParaBirimli(_para_id))

                } else {
                    return _iToplam;
                }
            })
            .then(function (_iToplam) {
                if (_onay_durum_id && _onay_durum_id > 0) {
                    //ürünle ilgili teklif onay durumuna göre temp oluştur
                    var anahtar = result.kp.temp.zsetUrunTeklifleriOnayDurumunaGore(_tahta_id, _urun_id, _onay_durum_id);
                    return result.dbQ.zcard(anahtar)
                        .then(function (_iToplam) {
                            if (_iToplam == 0) {
                                /* return result.dbQ.zinterstore(anahtar, 2,
                                 result.kp.temp.zsetUrunTeklifleriParaBirimli(_tahta_id, _urun_id, _para_id),
                                 result.kp.teklif.ssetTeklifOnayDurumlari(_onay_durum_id)); */

                                return result.dbQ.zinterstore(anahtar, 2,
                                    result.kp.urun.ssetTeklifleri(_tahta_id, _urun_id),
                                    result.kp.teklif.ssetTeklifOnayDurumlari(_onay_durum_id));
                            } else {
                                return _iToplam;
                            }
                        })
                } else {
                    return _iToplam;
                }
            });
    }
771443
function f_urun_ureticisi(_urun_id) {
        return (Array.isArray(_urun_id)
            ? result.dbQ.hmget(result.kp.urun.hsetUreticiler, _urun_id)
            : result.dbQ.hget(result.kp.urun.hsetUreticiler, _urun_id))
            .then(function (_dbUretici_id) {
                if (!_dbUretici_id) {
                    return null;
                }

                var db_kurum = require("./db_kurum");
                return db_kurum.f_db_kurum_id(_dbUretici_id);

            });
    }
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 [];
                        }
                    });
        }
    }
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;
         });*/
    }
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 [];
                }
            });

    }
11620
function f_urun_tumu(_tahta_id, _sayfalama) {
        //l.info("f_db_urun_tumu");

        return f_urun_aktif_urun_idleri(_tahta_id, _sayfalama)
            .then(
                /** @param {string[]} _aktifUrun_idleri */
                function (_aktifUrun_idleri) {
                    return result.dbQ.Q.all([
                            (_aktifUrun_idleri.length > 0
                                ? result.dbQ.scard(result.kp.temp.ssetTahtaUrun(_tahta_id))
                                : 0),
                            (_aktifUrun_idleri.length > 0
                                ? f_urun_id(_aktifUrun_idleri, _tahta_id)
                                : [])
                        ])
                        .then(function (_dbReplies) {
                            var sonuc = schema.f_create_default_object(schema.SCHEMA.LAZY_LOADING_RESPONSE);
                            sonuc.ToplamKayitSayisi = _dbReplies[0];
                            sonuc.Data = _dbReplies[1];
                            return sonuc;
                        })
                })
            .fail(function (_err) {
                l.e("sistemde kayıtlı ürünler çekilemedi." + _err);
                throw new exception.Istisna("Ürünler çekilemedi", "Sistemde kayıtlı ürünler çekilirken hata alındı: " + _err)
            });
    }
159816
function f_kalem_gizlenen_toplami(_tahta_id) {

        return result.dbQ.exists(result.kp.temp.ssetTahtaKalemTumu(_tahta_id))
            .then(function (_iExist) {
                return (_iExist
                    ? 1//temp var
                    : f_tahta_kalem_idler_aktif(_tahta_id));//temp oluşturmak için kalem idlerini çek )
            })
            .then(function () {
                return result.dbQ.Q.all([
                    f_kalem_gizlenen_idler(_tahta_id),
                    result.dbQ.scard(result.kp.temp.ssetTahtaKalemTumu(_tahta_id))

                ]).then(function (_ress) {

                    var sonuc = schema.f_create_default_object(schema.SCHEMA.GRAFIK_DONUT);
                    var gecerli = parseInt(_ress[0].length || 0),
                        toplam = parseInt(_ress[1] || 0);
                    sonuc.Toplam = toplam;
                    sonuc.Gecerli = gecerli;
                    sonuc.Gecersiz = toplam - gecerli;
                    return sonuc;
                });
            })


    }
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;
                });
        }
    }
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;
    }
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 [];
                        }
                    });
            });
    }
660622
function f_urun_bilgisi(_urun, _optsUrun) {

            if (!_urun) {
                return null;
            }

            var /** @type {Urun} */
            olusan_urun = schema.f_create_default_object(schema.SCHEMA.URUN);

            olusan_urun = _.extend(olusan_urun, _urun);

            return result.dbQ.Q.all([
                _optsUrun.bUreticiKurum ? f_urun_ureticisi(_urun.Id) : {Id: 0},
                _optsUrun.bArrAnahtarKelimeler ? f_urun_anahtar_tumu(_urun.Id, _tahta_id) : [{Id: 0}]
            ]).then(function (_ress) {
                olusan_urun.Uretici = /** @type {KurumDB} */_ress[0];
                olusan_urun.AnahtarKelimeler = /** @type {AnahtarKelime[]} */_ress[1];
                return olusan_urun;
            });
        }
1057925
function f_rol_tumu(_tahta_id) {
        return result.dbQ.smembers(result.kp.tahta.ssetOzelTahtaRolleri(_tahta_id, true))
            .then(function (_rol_idler) {
                return f_rol_id(_rol_idler);
            });
    }
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();
}
88549
function f_urunun_teklif_verildigi_fiyatlari(_tahta_id, _urun_id, _parabirim_id) {
        return f_urun_teklif_temp(_tahta_id, _urun_id, _parabirim_id)
            .then(function () {
                return result.dbQ.zrangebyscore(result.kp.temp.zsetUrunTeklifleriParaBirimli(_tahta_id, _urun_id, _parabirim_id), "-inf", "+inf")
                    .then(function (_teklif_idler) {
                        if (Array.isArray(_teklif_idler) && _teklif_idler.length > 0) {

                            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(_teklif_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(_.map(teklifler, "Fiyat"), true);
                                });

                        } else {
                            return [];
                        }
                    });
            });
    }
373172
function f_aktif_tahta_uye_idleri(_tahta_id, _sayfalama) {

        var sonucAnahtari = result.kp.temp.ssetTahtaKullanici(_tahta_id);
        if (_sayfalama) {
            var baslangic = _sayfalama.Sayfa * _sayfalama.SatirSayisi,
                bitis = _sayfalama.SatirSayisi;
        }

        return result.dbQ.exists(sonucAnahtari)
            .then(function (_iExist) {
                if (_iExist == 1) {
                    //temp anahtarı var
                    return 1;

                } else {
                    //temp yok oluştur
                    return result.dbQ.hkeys(result.kp.tahta.hsUyeleri(_tahta_id))
                        .then(function (_idler) {
                            if (_idler && _idler.length > 0) {
                                return result.dbQ.sadd(sonucAnahtari, _idler);
                            } else {
                                return null;
                            }
                        });
                }
            })
            .then(function () {
                return (_sayfalama
                    ? result.dbQ.sort(sonucAnahtari, "LIMIT", baslangic, bitis)
                    : result.dbQ.smembers(sonucAnahtari))
                    .then(function (_aktif_idleri) {
                        return _aktif_idleri.mapX(null, parseInt);
                    })
                    .fail(function (_err) {
                        console.error("Hata var:", _err);
                        throw _err;
                    })
            });
    }
280348
function (_ihale, _tahta_id) {

        if (_tahta_id && _tahta_id > 0) {

            f_ihaleyi_indexle(_ihale, _tahta_id);

        } else {
            //t�m tahtalar� �ek
            return db.tahta.f_db_tahta_tumu()
                .then(function (_arrTahtalar) {

                    //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");

                        return f_ihaleyi_indexle(_ihale, _dbTahta.Id)
                            .then(function () {
                                return _ihale;
                            });
                    });

                    return db.redis.dbQ.Q.all(arrPromises);
                })
                .then(function () {
                    return _ihale;
                });
        }
    }
695592
function f_tahta_teklif_idleri(_tahta_id) {
        return result.dbQ.smembers(result.kp.tahta.ssetTeklifleri(_tahta_id, true));
    }