Gelen ihale bilgilerinin takipte olup olmadığını belirtiyoruz
@param {integer} _tahta_id
@param {Array/Object} _ihaleler
@returns {*}
963987
function f_takip_kontrol(_tahta_id, _ihaleler) {

        if (Array.isArray(_ihaleler) && _ihaleler.length > 0) {

            var arr = _ihaleler.map(function (_ihale) {
                return f_takipte_mi(_tahta_id, _ihale)
            });

            return result.dbQ.Q.all(arr);

        } else {
            return f_takipte_mi(_tahta_id, _ihaleler);
        }
    }
1351419
function f_ihaleEkle(_es_ihale, _db_ihale, _kul_id) {

            _kul_id = _kul_id || _kullanici_id;

            return result.dbQ.incr(result.kp.ihale.idx)
                .then(function (_id) {
                    _es_ihale.Id = _id;
                    _db_ihale.Id = _id;

                    return result.dbQ.Q.all([
                            result.dbQ.hset(result.kp.ihale.tablo, _db_ihale.Id, JSON.stringify(_db_ihale)),
                            result.dbQ.sadd(result.kp.ihale.ssetGenel, _db_ihale.Id),
                            result.dbQ.sadd(result.kp.ihale.ssetIhaleUsulAdlari, _db_ihale.IhaleUsul),
                            result.dbQ.sadd(result.kp.ihale.ssetGenel, _db_ihale.Id),
                            result.dbQ.hset(result.kp.ihale.hsetIhale_ihaleDunyasiId, _es_ihale.IhaleProviders.IhaleDunyasi.IhaleDunyasiId, _db_ihale.Id),
                            result.dbQ.zadd(result.kp.ihale.zsetYapilmaTarihi, _db_ihale.IhaleTarihi, _db_ihale.Id)
                        ])
                        .then(function () {
                            //şehir ekle
                            if (_db_ihale.IlAdi) {
                                var db_sehir = require("./db_sehir");
                                return db_sehir.f_db_sehir_ekle(/** @type {Sehir} */{Id: 0, Adi: _db_ihale.IlAdi});
                            } else {
                                return _id;
                            }
                        })
                        .then(function () {
                            //bölge ekle
                            if (_db_ihale.BolgeAdi) {
                                var db_bolge = require("./db_bolge");
                                return db_bolge.f_db_bolge_ekle(/** @type {Bolge} */{Id: 0, Adi: _db_ihale.BolgeAdi});
                            } else {
                                return _id;
                            }
                        })
                });
        }
1095626
function f_tahta_ihale_indeksli_tahta_anahtarKelimelerineGore(_tahta_id, _opts) {
        var db_ihale = require("./db_ihale");

        // anahtalar diyaliz > 1, fx80 > 25, av-set > 145
        // a:1:ihale 101, 102
        // tahta:401:anahtar 1,25,145
        // sdiff (sunion a:1 a:25 a:145 ihale:sirala:tarihe) ihale:silinen
        return f_tahta_ihale_indeksli_idler(_tahta_id)
            .then(function (_lstIhaleIdler) {
                return _lstIhaleIdler.length == 0
                    ? _lstIhaleIdler
                    : db_ihale.f_db_ihale_id(_lstIhaleIdler, _tahta_id, _opts);
            });
    }
216839
function f_ihaleDunyasindanCek(_ihale_id, _topX) {
        var defer = redis.dbQ.Q.defer();
        console.log("ihale dünyasından cekmeden onceki argumanlar: " + JSON.stringify(arguments));
        // MySql bağlantısı kurulsun
        result.connection = f_ihaleDunyasinaBaglan();

        var queryWhere = _ihale_id
            ? "WHERE ihale_id>" + _ihale_id
            : "";

        var queryLimit = _topX
            ? "LIMIT " + _topX
            : "LIMIT 2";

        //var query = "SELECT * FROM webservis " + queryWhere + " " + queryLimit;
        var query = "SELECT * FROM ihale " + queryWhere + " " + queryLimit;

        console.log(query);

        result.connection.query(query, function (err, rows) {
            if (err) {
                console.log("Errr: ");
                console.log(err);
                defer.reject(err);
            } else {
                console.log("Çekilen kayıt sayısı: " + rows.length);
                defer.resolve(rows);
            }
        });

        return defer.promise;
    }
657854
function f_kalem_ekle_tahta(_tahta_id, _ihale_id, _es_kalem, _db_kalem, _kul_id) {

        var onay_durumu = _es_kalem.OnayDurumu;

        //genel ihaleye tahtada yeni kalem ekleniyor
        //bu durumda sadece tahtanın (tahta:401:ihale:101:kalem) kalemlerine eklemeliyiz
        //ihalenin genel kalemlerine değil!! (ihale:101:kalem)
        return result.dbQ.incr(result.kp.kalem.idx)
            .then(function (_id) {
                _es_kalem.Id = _db_kalem.Id = _id;

                emitter.emit(schema.SABIT.OLAY.KALEM_EKLENDI, _es_kalem, _ihale_id, _tahta_id, _kul_id);

                //satırı ihale-tahta ile ilişkilendireceğiz
                return result.dbQ.hset(result.kp.kalem.tablo, _id, JSON.stringify(_db_kalem))
                    .then(function () {

                        return result.dbQ.Q.all([
                            result.dbQ.sadd(result.kp.tahta.ssetOzelKalemleri(_tahta_id, _ihale_id, true), _db_kalem.Id),
                            result.dbQ.hset(result.kp.kalem.hsetIhaleleri, _db_kalem.Id, _ihale_id)
                        ]);
                    })
                    .then(function () {
                        //onay durumu varsa güncelle yoksa satırı döner
                        return f_kalem_onay_durumu_guncelle(_tahta_id, _ihale_id, _db_kalem.Id, onay_durumu);
                    })
                    .then(function () {
                        return f_kalem_id(_id, _tahta_id);
                    });
            })
            .fail(function (_err) {
                l.e(_err);
                throw new exception.Istisna("kalem eklenemedi", "HATA: " + _err);
            });
    }
266445
function f_kalem_indeksli_idler_ihaleye_bagli(_tahta_id, _ihale_id) {
        var db_ihale = require('./db_ihale');

        return result.dbQ.Q.all([
                f_kalem_indeksli_idler(_tahta_id), //anahtar kelimelerin geçtiği kalemler
                db_ihale.f_db_ihale_aktif_kalem_idler(_ihale_id, _tahta_id)//ihalenin kalemleri
            ])
            .then(function (_ress) {
                var anahtar_kalem_idler = _ress[0],
                    ihale_kalem_idler = _ress[1];
                console.log("anahtar_kalem_idler>" + anahtar_kalem_idler);
                console.log("ihale_kalem_idler>" + ihale_kalem_idler);
                var kesisim = ihale_kalem_idler.intersectionXU(anahtar_kalem_idler);
                console.log("kesisim>" + kesisim);
                return kesisim;
            })
            .fail(function (_err) {
                var hata = "indeksli kalemler çekilirken hata oluştu: " + _err;
                l.e(hata);
                return hata;
            });
    }
219938
function f_uyarilar_tahta_tumu(_tahta_id) {
        return result.dbQ.smembers(result.kp.tahta.ssetUyarilari(_tahta_id, true))
            .then(function (_uyari_idleri) {
                return f_uyari_id(_uyari_idleri, _tahta_id);
            });
    }
596052
function f_kontrol(es_ihale, db_ihale, tahta_id, kurum_id, _kul_id) {

        var orj_ihale_id = db_ihale.Id;
        return f_id(orj_ihale_id, tahta_id)
            .then(function (_eski_ihale_bilgisi) {

                return f_genel_kontrol(orj_ihale_id)
                    .then(function (_iGenelIhale) {
                        if (_iGenelIhale == 1) {

                            //genel ihaleler içinde kayıtlı
                            /*önce ezilen ihalelere ekle
                             * sonra ihale_id yi bir arttır ve yeni tahta ihalesi olarak ekle*/
                            return result.dbQ.sadd(result.kp.tahta.ssetEzilenIhaleleri(tahta_id), orj_ihale_id)
                                .then(function () {
                                    return result.dbQ.incr(result.kp.ihale.idx)
                                        .then(function (_id) {
                                            es_ihale.Id = db_ihale.Id = _id;
                                            db_ihale.Orjinal_Id = orj_ihale_id;

                                            return result.dbQ.Q.all([

                                                result.dbQ.hset(result.kp.ihale.tablo, _id, JSON.stringify(db_ihale)),
                                                result.dbQ.sadd(result.kp.tahta.ssetOzelIhaleleri(tahta_id, true), _id),
                                                result.dbQ.zadd(result.kp.ihale.zsetYapilmaTarihi, db_ihale.IhaleTarihi, db_ihale.Id)

                                            ]).then(function () {

                                                /**ihaleyi indexle
                                                 * ama önce ihale id yi indexlenmişse listeden kaldırmalıyız.
                                                 * (gelen konu içinde indexlenecek anahtar var mı bilmiyoruz, bu nedenle kaldırılmalı)
                                                 */

                                                    //_ihale, _kurum_id, _tahta_id, _kul_id
                                                emitter.emit(schema.SABIT.OLAY.IHALE_EKLENDI, es_ihale, kurum_id, tahta_id, _kul_id);

                                                //ihalenin kurumunu ata
                                                if (kurum_id > 0) {
                                                    return result.dbQ.Q.all([
                                                        result.dbQ.hset(result.kp.ihale.hsetYapanKurumlari, db_ihale.Id, kurum_id),
                                                        result.dbQ.srem(result.kp.kurum.ssetIhaleleri(_eski_ihale_bilgisi.Kurum_Id), db_ihale.Id),
                                                        result.dbQ.sadd(result.kp.kurum.ssetIhaleleri(kurum_id), db_ihale.Id)
                                                    ]);
                                                } else {
                                                    return db_ihale;
                                                }

                                            }).then(function () {
                                                //satırları kopyala ve durumlarını düzenle
                                                return f_guncellendi_satir_kontrol(tahta_id, db_ihale.Id, orj_ihale_id);
                                            }).then(function () {
                                                //teklifi var mı kontrol et varsa düzenle
                                                return f_guncellendi_teklif_kontrol(tahta_id, orj_ihale_id, db_ihale.Id);
                                            }).then(function () {

                                                //ihale bilgisini dön
                                                return f_id(db_ihale.Id, tahta_id);
                                            });
                                        });
                                });
                        }
                        else {

                            // bu ihale genel değil, tahtaya eklenen özel ihaledir

                            return result.dbQ.Q.all([
                                result.dbQ.hset(result.kp.ihale.tablo, db_ihale.Id, JSON.stringify(db_ihale)),
                                result.dbQ.zrem(result.kp.ihale.zsetYapilmaTarihi, db_ihale.Id),
                                result.dbQ.zadd(result.kp.ihale.zsetYapilmaTarihi, db_ihale.IhaleTarihi, db_ihale.Id)

                            ]).then(function () {
                                /**ihaleyi indexle
                                 * ama önce ihale id yi indexlenmişse listeden kaldırmalıyız.
                                 * (gelen konu içinde indexlenecek anahtar var mı bilmiyoruz, bu nedenle kaldırılmalı)
                                 */
                                emitter.emit(schema.SABIT.OLAY.IHALE_GUNCELLENDI,
                                    {
                                        eski_ihale: _eski_ihale_bilgisi,
                                        yeni_ihale: es_ihale,
                                        tahta_id: tahta_id,
                                        kul_id: _kul_id
                                    });

                                if (kurum_id > 0) {

                                    //ihalenin kurumunu yenisiyle değiştiriyoruz
                                    //kurumun ihalelerinde eski kurumu çıkarıp yenisini ekliyoruz

                                    return result.dbQ.Q.all([
                                        result.dbQ.hset(result.kp.ihale.hsetYapanKurumlari, db_ihale.Id, kurum_id),
                                        result.dbQ.srem(result.kp.kurum.ssetIhaleleri(_eski_ihale_bilgisi.Kurum_Id), db_ihale.Id),
                                        result.dbQ.sadd(result.kp.kurum.ssetIhaleleri(kurum_id), db_ihale.Id)
                                    ]);
                                }
                                else {
                                    return db_ihale;
                                }
                            }).then(function () {
                                return f_id(db_ihale.Id, tahta_id);
                            });
                        }
                    });
            });
    }
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;
        });
    }
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;
                });
            })


    }
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;
    }
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]});
                });
    }
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);
            })
    }
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;
    }
1209154
function f_getIhale(_ihale) {
        console.log("---------- F_GET_IHALE -------------");
        var defer = db.redis.dbQ.Q.defer(),
            sayfa = '';

        options.method = 'GET';
        options.path = _ihale.yonlendirilenAdres || _ihale.adres.replace('www.', '');
        delete options.headers['Content-Length'];
        delete options.headers['Content-Type'];

        http.request(options, function (res) {
                console.log('STATUS: ' + res.statusCode);
                console.log('HEADERS: ' + JSON.stringify(res.headers));

                res.on('error', function () {
                        var error = "f_getIhale sırasında, Response Error: " + JSON.stringify(arguments);
                        console.log(error);
                        defer.reject(error);
                    })
                    .on('data', function (chunk) {
                        sayfa += f_encodeTurkish(chunk);
                    });

                if (res.statusCode == 302) {
                    console.log("-------------- LOCATION -----------\n" + res.headers.location);
                    _ihale.yonlendirilenAdres = 'http://saglikbank.com/' + res.headers.location;
                    options.headers.Referer = options.path;
                    console.log(_ihale.yonlendirilenAdres);
                    res.on('end', function () {
                        sayfa = '';
                        f_getIhale(_ihale)
                            .then(function (_ihale) {
                                console.log("ikinci kez getIhale");
                                defer.resolve(_ihale);
                            })
                            .fail(function () {
                                var error = "f_getIhale sırasında Error: " + JSON.stringify(arguments);
                                console.log(error);
                                defer.reject(error);
                            });
                    });
                } else {
                    res.on('end', function () {
                        $sayfa = $(sayfa);

                        var ihaleUsul = $sayfa.find("#UsulLBL").text().trim();
                        var ihaleNo = $sayfa.find("#KayitNoLBL").text().trim();
                        var ihaleKonusu = $sayfa.find("#IhaleKonusuLBL").text().trim();

                        var kurumAdi = $sayfa.find("#ctl00_KurumAdi2LBL").text().trim();
                        var ihaleTarihi = $sayfa.find("#ctl00_IhaleTarihi2LBL").text().trim();
                        var tarih1 = moment(ihaleTarihi, "DD.MM.YYYY");

                        var kurumTelNo = $sayfa.find("#ctl00_KurumTelefonNoLBL").text().trim();
                        var sistemeEklenmeTarihi = $sayfa.find("#ctl00_EklemeTarihiLBL").text();
                        var tarih2 = moment(sistemeEklenmeTarihi, "DD.MM.YYYY hh:mm");

                        var kurumFaksNo = $sayfa.find("#ctl00_KurumFaksNoLBL").text().trim();
                        var kurumEmail = $sayfa.find("#ctl00_KurumEmailTB").find("a").text().trim();
                        var kurumAdres = $sayfa.find("#ctl00_KurumAdresiLBL").text().trim();
                        var sartnameAdres = $sayfa.find("#ctl00_SartnameListesiLBL").find("a").text().trim();
//TODO: Sadece bir şartname varsa tamam ama zeyilname ya da birden fazla dosya için kontrol edilecek

                        var yeni_ihale = {
                            "Kurum": {
                                "Adi": kurumAdi,
                                "Id": 0,
                                "Tel": kurumTelNo,
                                "Eposta": kurumEmail == "[email protected]" ? "" : kurumEmail,
                                "Faks": kurumFaksNo,
                                "AcikAdres": kurumAdres
                            },
                            "IhaleNo": ihaleNo.replace('(', '').replace(')', ''),
                            "Konusu": ihaleKonusu,
                            "IhaleTarihi": new Date(tarih1).getTime(),
                            "IhaleUsul": ihaleUsul,
                            "YapilacagiAdres": "",
                            "SartnameAdres": sartnameAdres,
                            "SistemeEklenmeTarihi": new Date(tarih2).getTime()
                        };

                        var tbl = $sayfa.find(".listeTablosu").parents("table").first().find("tr").map(function () {
                            if ($(this).attr("style")) {
                                return {
                                    "SiraNo": $(this).find("td").first().find("strong").text().trim(),
                                    "MalzemeCinsi": $(this).find("td:nth-child(1)").text().replace('\n', '').replace('\r', '').trim(),
                                    "Miktar": $(this).find("td:nth-child(2)").text().trim(),
                                    "Birim": $(this).find("td:nth-child(3)").text().trim(),
                                    "Aciklama": $(this).find('td:nth-child(4)').text().replace('\n', '').replace('\r', '').trim()
                                }
                            }
                        }).toArray();
                        yeni_ihale.Kalemler = tbl;

                        _ihale = _.extend(_ihale, yeni_ihale);
                        console.log("oluşan ihale:" + JSON.stringify(_ihale));
                        defer.resolve(_ihale);
                    });
                }
            })
            .on('error', function (e) {
                var error = 'Problem with request: ' + e.message;
                console.log(error);
                defer.reject(error);
            })
            .on('end', function (e) {
            })
            .end();
        return defer.promise;
    }
34923
function f_rol_sil_tahta(_tahta_id, _rol_id, _arrKul_id) {

        // 1. Tahtanın üye id lerini Array mi diye kontrol et
        // 2. üye id lerinden rolü çıkar
        // 3. tahta id den bu rolü sil
        if (_rol_id) {
            var arrPromises = Array.isArray(_arrKul_id) //1
                ? _arrKul_id.mapX(null, f_rol_sil_kullanici, _tahta_id, _rol_id) // 2
                : [];
            //3

            return arrPromises.concat(_arrKul_id).allX()
                .then(function () {
                    return [
                        result.dbQ.srem(result.kp.tahta.ssetOzelTahtaRolleri(_tahta_id, true), _rol_id),
                        result.dbQ.sadd(result.kp.tahta.ssetOzelTahtaRolleri(_tahta_id, false), _rol_id)
                    ].allX();
                });
        } else {
            console.error("Silinecek aktif bir rol bulunamadı");
            throw "Silinecek aktif bir rol bulunamadı";
        }
    }
607498
function f_kurum_tumu(tahta_id, ihale_id) {
        return result.dbQ.sinter(result.kp.tahta.ssetTeklifleri(tahta_id, true), result.kp.ihale.ssetTeklifleri(ihale_id))
            .then(function (_teklif_idler) {
                if (_teklif_idler && _teklif_idler.length > 0) {
                    return result.dbQ.hmget(result.kp.teklif.hsetKurumlari, _teklif_idler)
                        .then(function (_kurum_idler) {
                            if (_kurum_idler && _kurum_idler.length > 0) {
                                var db_kurum = require("./db_kurum");
                                return db_kurum.f_db_kurum_id(_kurum_idler);
                            } else {
                                return [];
                            }
                        });
                } else {
                    return null;
                }
            })
            .fail(function () {
                l.e("ihale kurumları çekilemedi");
            });
    }