docs: function f_teklif_guncelle(_tahta_id, _teklif, _kul_id) {
  
          l.info("f_db_teklif_guncelle");
  
          if (!_teklif.Kurum_Id) {
              throw new exception.Istisna("Kurum bulunamadı!", "Teklifin kurumu bulunamadı!");
          }
  
          return f_kalemin_onay_durumu_kazandi_mi(_tahta_id, _teklif.Kalem_Id, _teklif.TeklifDurumu_Id)
              .then(function (_bKazandi) {
                  if (_bKazandi == true) {
                      //bir kalemin 1 kazananı olabilir.
                      l.e("1 kalemin 1 kazananı olabilir");
                      throw new exception.Istisna("VALİDASYON HATASI", "Seçilen kalemin onay durumu KAZANDI olarak seçili durumda. Bir kalemin sadece bir kazananı olabilir. Lütfen kontrol ediniz.");
                  }
                  else {
                      /** @type {OptionsTeklif} */
                      var opts = result.OptionsTeklif({
                          bArrUrunler: false,
                          bKalemBilgisi: false,
                          bIhaleBilgisi: false,
                          bKurumBilgisi: false,
                          optUrun: {}
                      });
  
                      return f_teklif_id(_teklif.Id, _tahta_id, opts)
                          .then(
                              /**
                               *
                               * @param {TeklifDB} _dbEskiTeklif
                               * @returns {*}
                               */
                              function (_dbEskiTeklif) {
                                  if (_dbEskiTeklif && _dbEskiTeklif.Id > 0) {
  
                                      //teklif hash güncelle
                                      return result.dbQ.Q.all([
                                          result.dbQ.hset(result.kp.teklif.tablo, _teklif.Id, JSON.stringify(_teklif)),
                                          result.dbQ.hset(result.kp.teklif.hsetKurumlari, _teklif.Id, _teklif.Kurum_Id), //teklifi atan kurum hash değişmiş olabilir, yenisini ekle
                                          result.dbQ.srem(result.kp.teklif.ssetTeklifOnayDurumlari(_dbEskiTeklif.TeklifDurumu_Id), _teklif.Id),
                                          result.dbQ.sadd(result.kp.teklif.ssetTeklifOnayDurumlari(_teklif.TeklifDurumu_Id), _teklif.Id),
                                          //tahtanın para birimli teklifleri setini düzenle
                                          //eski teklifin para birimi farklı ise setten çıkartıp yenisine ekle
                                          result.dbQ.srem(result.kp.teklif.ssetTeklifParaBirimli(_dbEskiTeklif.ParaBirim_Id), _teklif.Id),
                                          result.dbQ.sadd(result.kp.teklif.ssetTeklifParaBirimli(_teklif.ParaBirim_Id), _teklif.Id)
                                      ]).then(function () {
                                          if (_dbEskiTeklif.Urun_Idler && _dbEskiTeklif.Urun_Idler.length > 0) {
                                              //teklif verilen ürünler değişmiş olabilir, setleri yeni haliyle düzenle
                                              //önce eskileri kaldır
  
                                              return _dbEskiTeklif.Urun_Idler.map(function (_urun_id) {
                                                  return result.dbQ.Q.all([
                                                      result.dbQ.srem(result.kp.ihale.ssetUrunleri(_tahta_id, _teklif.Ihale_Id), _urun_id),
                                                      result.dbQ.srem(result.kp.urun.ssetTeklifleri(_tahta_id, _urun_id), _teklif.Id)
                                                  ]);
                                              }).allX();
  
                                          } else {
                                              return _teklif;
                                          }
  
                                      }).then(function () {
                                          if (_teklif.Urun_Idler) {
                                              //yeni ürün_idlerini ekle
                                              return result.dbQ.hset(result.kp.teklif.hsetUrunleri, _teklif.Id, JSON.stringify(_teklif.Urun_Idler))
                                                  .then(function () {
                                                      return _teklif.Urun_Idler.map(function (_urun_id) {
                                                          return result.dbQ.Q.all([
                                                              result.dbQ.sadd(result.kp.ihale.ssetUrunleri(_tahta_id, _teklif.Ihale_Id), _urun_id),
                                                              result.dbQ.sadd(result.kp.urun.ssetTeklifleri(_tahta_id, _urun_id), _teklif.Id)
                                                          ]);
                                                      }).allX();
  
                                                  });
                                          }
                                          else {
                                              return _teklif;
                                          }
                                      }).then(function () {
                                          return f_teklif_id(_teklif.Id, _tahta_id)
                                              .then(function (_dbTeklif) {
                                                  emitter.emit(schema.SABIT.OLAY.TEKLIF_GUNCELLENDI, _dbEskiTeklif, _dbTeklif, _tahta_id, _kul_id);
                                                  return _dbTeklif;
                                              });
                                      });
  
                                  } else {
                                      throw new exception.Istisna("HATA ALINDI", "Teklif bilgisi sistemde bulunamadı!");
                                  }
                              });
                  }
              });
      }