region ÜRÜNLE ILIŞKILI KURUM IŞLEMLERI 
Ürünle ilişkilendirilmiş kurum bilgilerini döner. Yani bu listede üretici satıcı bayi her türlü kurum bilgisi mevcuttur
@param {integer} _tahta_id
@param {integer} _urun_id
@returns {*}
172496
function f_urun_iliskili_kurum_tumu(_tahta_id, _urun_id) {
        return result.dbQ.smembers(result.kp.urun.ssetKurumlari(_tahta_id, _urun_id))
            .then(function (_idler) {
                var db_kurum = require("./db_kurum");
                return db_kurum.f_db_kurum_id(_idler);
            });
    }
866254
function f_tahta_ihale_rapor_bilgileri(_tahta_id, _arama) {


        /*return f_indekslenen_ve_takip_edilen_kalem_idler(_tahta_id)
         .then(function (_kalem_idler) {
         console.log("_kalem_idler>" + _kalem_idler)
         return result.dbQ.hmget(result.kp.kalem.hsetIhaleleri, _kalem_idler)
         .then(function (_ihale_idler) {
         //aynı ihale_id gelmesin diye uniq metoduna gönderiyoruz
         _ihale_idler = _.uniq(_ihale_idler);

         console.log("_ihale_idler>" + _ihale_idler);

         /!** @type {OptionsIhale} *!/
         var opts = {
         bArrKalemleri: true,
         bYapanKurum: true,
         bTakip: true,
         optsKalem: {
         bArrTeklifleri: true,
         bTakiptemi: true,
         bOnayDurumu: true
         }
         };
         var db_ihale = require("./db_ihale");
         return db_ihale.f_db_ihale_id(_ihale_idler, _tahta_id, opts);
         })
         });*/

        return f_indekslenen_ve_takip_edilen_ihale_idleri(_tahta_id)
            .then(function (_ihale_idler) {
                console.log("_ihale_idler>" + _ihale_idler);

                if (Array.isArray(_ihale_idler) && _ihale_idler.length > 0) {
                    /** @type {OptionsIhale} */
                    var opts = {
                        bArrKalemleri: false,
                        bYapanKurum: true,
                        bTakip: true
                        /*  optsKalem: {
                         bArrTeklifleri: true,
                         bTakiptemi: true,
                         bOnayDurumu: true
                         }*/
                    };
                    var db_ihale = require("./db_ihale");
                    return db_ihale.f_db_ihale_id(_ihale_idler, _tahta_id, opts);
                } else {
                    return [];
                }
            })
    }
1009890
function f_tahta_ihale_indeksli_ihaleler_tarihe_gore_sirali(_tahta_id, _arama) {

        var baslangic = 0,
            bitis = 10,
            sonucAnahtari = result.kp.temp.zsetTahtaAnahtaraGoreSiraliIhaleTarihineGore(_tahta_id);

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

        var tarih1 = _arama.Tarih.tarih1,
            tarih2 = _arama.Tarih.tarih2;

        return f_tahta_ihale_indeksli_idler_tarihe_gore_sirali(_tahta_id)
            .then(function () {
                return (tarih1 && tarih2
                    ? result.dbQ.zrevrangebyscore(sonucAnahtari, tarih2, tarih1, "LIMIT", baslangic, bitis)
                    : result.dbQ.zrevrangebyscore(sonucAnahtari, "+inf", "-inf", "LIMIT", baslangic, bitis))
                    .then(function (_ihale_idler) {

                        var sonuc = schema.f_create_default_object(schema.SCHEMA.LAZY_LOADING_RESPONSE);
                        sonuc.ToplamKayitSayisi = _ihale_idler.length;

                        if (_ihale_idler && _ihale_idler.length > 0) {
                            var db_ihale = require("./db_ihale");
                            return db_ihale.f_db_ihale_id(_ihale_idler, _tahta_id)
                                .then(function (_data) {
                                    sonuc.Data = _data;
                                    return sonuc;
                                });
                        } else {
                            sonuc.Data = [];
                            return sonuc;
                        }
                    });
            });
    }
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]});
                });
    }
31042
function f_kullanici_tahtalari(_kul_id, _opts) {

        return f_kullanici_tahta_idleri(_kul_id)
            .then(function (_dbArrTahtaId) {
                //console.log = "Oncesi _dbArrTahtaId": _dbArrTahtaId;
                var db_tahta = require('./db_tahta');
                return db_tahta.f_db_tahta_id(_dbArrTahtaId, _opts);
            });
    }
900301
function f_anahtar_index_ekle_urun(anahtar_id, urun_id) {
        return Array.isArray(urun_id)
            ? result.dbQ.sadd_array([result.kp.anahtar.ssetIndexUrun(anahtar_id)].concat(urun_id))
            : result.dbQ.sadd(result.kp.anahtar.ssetIndexUrun(anahtar_id), urun_id);
    }
356805
function f_tahta_kalem_takip_ekle(_tahta_id, _kalem_id) {
        //kalem takip edilecek olarak belirlendiğinde ihalesi de takip edilecek olarak ayarlamalıyız
        return result.dbQ.sadd(result.kp.tahta.ssetTakiptekiKalemleri(_tahta_id), _kalem_id)
            .then(function () {
                return result.dbQ.hget(result.kp.kalem.hsetIhaleleri, _kalem_id)
                    .then(function (_ihale_id) {
                        return result.dbQ.sadd(result.kp.tahta.ssetTakiptekiIhaleleri(_tahta_id), _ihale_id);
                    });
            });
    }
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;
    }
428679
function f_tahta_ihale_indeksli_idler(_tahta_id) {
        return result.dbQ.exists(result.kp.temp.ssetTahtaAnahtarIhaleleri(_tahta_id))
            .then(function (_exists) {
                if (_exists == 1) {
                    return result.dbQ.smembers(result.kp.temp.ssetTahtaAnahtarIhaleleri(_tahta_id));

                } else {
                    return f_tahta_ihale_indeksli_tahta_anahtar_kelimelerine_gore(_tahta_id)
                        .then(function () {
                            return result.dbQ.smembers(result.kp.temp.ssetTahtaAnahtarIhaleleri(_tahta_id));
                        });
                }
            });
    }
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);
    }
1217831
function f_kalem_gizlenen_tumu(_tahta_id) {
        return f_kalem_gizlenen_idler(_tahta_id)
            .then(function (_kalem_idler) {
                if (_kalem_idler && _kalem_idler.length > 0) {
                    return f_kalem_id(_kalem_idler, _tahta_id);
                } 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;
         });*/
    }
203588
function f_urunun_kazandigi_teklif_fiyatlari(_tahta_id, _urun_id, _parabirim_id) {
        //l.info("f_db_urunun_kazandigi_teklif_fiyatlari");
        //ürünün kazandığı teklifleri bul
        //bu tekliflerin fiyatlarını getir
        return f_urunun_teklif_fiyatlari_onay_durumuna_gore(_tahta_id, _urun_id, schema.SABIT.ONAY_DURUM.teklif.KAZANDI, _parabirim_id);
    }
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 [];
                        }
                    });
            });
    }
1310821
function f_kalemin_onay_durumu_kazandi_mi(_tahta_id, _kalem_id, _onay_durum_id) {
        l.info("f_db_kalemin_onay_durumu_kazandi_mi");
        return result.dbQ.sinter(
            result.kp.kalem.ssetTeklifleri(_kalem_id),
            result.kp.tahta.ssetTeklifleri(_tahta_id, true),
            result.kp.teklif.ssetTeklifOnayDurumlari(schema.SABIT.ONAY_DURUM.teklif.KAZANDI))
            .then(function (_teklif_idler) {
                return (_teklif_idler && _teklif_idler.length > 0 && _onay_durum_id == schema.SABIT.ONAY_DURUM.teklif.KAZANDI)
                    ? true
                    : false;
            });
    }
1243047
function f_aktif_kurum_idleri(_tahta_id, _sayfalama) {
        var defer = result.dbQ.Q.defer();

        var multi = result.rc.multi(),
            sonucAnahtari = _tahta_id && _tahta_id > 0
                ? result.kp.temp.ssetTahtaKurum(_tahta_id)
                : result.kp.temp.ssetKurum;


        result.dbQ.exists(sonucAnahtari)
            .then(function (_iExist) {

                if (_iExist) {
                    //temp anahtarı var yeniden çekmeye gerek yok, kurum bilgilerini dön
                } else {
                    //temp anahtarı yok oluştur ve kurum bilgilerini dön

                    //temp:kurum:genel:aktif = kurum:genel - kurum:X
                    multi.sdiffstore(result.kp.temp.ssetKurum, result.kp.kurum.ssetGenel, result.kp.kurum.ssetSilinen);

                    if (_tahta_id && _tahta_id > 0) {
                        multi.sunionstore(result.kp.temp.ssetTahtaKurumTumu(_tahta_id), result.kp.temp.ssetKurum, result.kp.tahta.ssetOzelKurumlari(_tahta_id, true))
                            .sunionstore(result.kp.temp.ssetTahtaKurumIstenmeyen(_tahta_id), result.kp.tahta.ssetOzelKurumlari(_tahta_id, false), result.kp.tahta.ssetGizlenenKurumlari(_tahta_id), result.kp.tahta.ssetEzilenKurumlari(_tahta_id))
                            .sdiffstore(result.kp.temp.ssetTahtaKurum(_tahta_id), result.kp.temp.ssetTahtaKurumTumu(_tahta_id), result.kp.temp.ssetTahtaKurumIstenmeyen(_tahta_id));
                    }
                }

                multi.exec(function (err, replies) {
                    if (err) {
                        l.e("Kurumlar ç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("Kurumlar çekilemedi. Hata: " + _err);
                        defer.reject(_err);
                    });
                });
            });


        return defer.promise;
    }
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)
            });
    }