def logout(): """ Kullanıcı oturumunu kapatır. """ signal_payload = { "message_type": USER_ACTIVITY_MESSAGES.get("auth").get("logout").type_index, "nesne": 'User', "nesne_id": current_user.id, "ekstra_mesaj": "{} adlı kullanıcı çıkış yaptı.".format(current_user.username), } signal_sender(**signal_payload) last_login_role = { current_app.config['USER_LAST_LOGIN_ROLE_ID_CACHE_KEY'].format(user_id=current_user.id): session.get('current_role'), current_app.config['USER_LAST_LOGIN_ROLE_NAME_CACHE_KEY'].format(user_id=current_user.id): session.get('current_role_name') } SessionHandler.session_logout_flush(is_authenticated=False, last_role=last_login_role) logout_user() return redirect(url_for('anasayfa.BapAnasayfaView:bap_anasayfa'))
def before_first_request(): """ App'in aldığı İLK istek öncesinde çalışan pre-request hook'udur. anonim user için session'da kullanılacak bilgiler redis'e yazılır. """ SessionHandler.anonymous_user_set_cache() set_system_user_info() SessionHandler.universite_id() user_activity_message_index_controll() init_mail()
def before_request(): """ Her istek öncesinde çalışan pre-request hook'udur. Eğer session içine bir `access_token` yerleştirilmemiş ise jwt ile ürettiği token'ı aynı anahtar isim altına yerleştirir. """ if 'access_token' not in session: session['access_token'] = create_access_token(identity=session.sid) session['activity_context'] = uuid4().hex SessionHandler.anonymous_user_set_session()
def get_satinalma_for_siparis_formu(satinalma_id): """ Satinalma siparis formu için eklenmiştir. """ proje = DB.session.query( Proje, ProjeSatinAlmaTalebi.talep_numarasi).join( ProjeSatinAlmaTalebi, ProjeSatinAlmaTalebi.proje_id == Proje.id).filter( ProjeSatinAlmaTalebi.id == satinalma_id).one() form = FirmaSelectForm(satinalma_id) uni_adi = \ DB.session.query(Birim.ad).filter(Birim.id == SessionHandler.universite_id()).first()[0] universite_adi = uni_adi if uni_adi else 'ilgili üniversite' data = { 'form': form, 'satinalma_id': satinalma_id, 'proje': proje[0], 'talep_numarasi': proje[1], 'universite_adi': universite_adi } return data
def init_mail(app=None): """ flask-mail i initialize eder """ if app is None: app = current_app mail = Mail() try: universite_id = SessionHandler.universite_id() ayarlar = DB.session.query(SiteAyarlari).filter_by( universite_id=universite_id).first() mail_sunucu_ayarlari = ayarlar.params["mail_sunucu_ayarlari"] mail_config = { "MAIL_SERVER": mail_sunucu_ayarlari['mail_server'], "MAIL_PORT": mail_sunucu_ayarlari['mail_port'], "MAIL_USE_TLS": mail_sunucu_ayarlari['mail_use_tls'], "MAIL_USE_SSL": mail_sunucu_ayarlari['mail_use_ssl'], "MAIL_USERNAME": mail_sunucu_ayarlari['mail_username'], "MAIL_PASSWORD": ayarlar.mail_password, "MAIL_DEFAULT_SENDER": mail_sunucu_ayarlari['mail_default_sender'], "MAIL_MAX_EMAILS": mail_sunucu_ayarlari['mail_max_emails'] } app.logger.info("Mail ayarlari databaseden tekrar yuklendi") state = mail.init_mail(config=mail_config) app.extensions['mail'] = state except (AttributeError, RuntimeError, InternalError, ProgrammingError): app.logger.info( "Mail ayarlari databaseden yuklenemedi config'den aliniyor") mail.init_app(app=app)
def get_logo_url(): """Universite ID'sini kullanarak site logosunun url ini return eder.""" universite_id = SessionHandler.universite_id() result = DB.session.query(SiteAyarlari).options( load_only('logo')).filter_by(universite_id=universite_id).first() logo_url = None if result and result.logo: logo_url = current_app.wsgi_app.url_for(result.logo.path) return logo_url
def get_sablon_logo_url(): universite_id = SessionHandler.universite_id() result = DB.session.query(SiteAyarlari).options( load_only('logo')).filter_by(universite_id=universite_id).first() logo_url = '/static/assets/img/brand-logo2.png' if result and result.logo: logo_url = current_app.wsgi_app.url_for(result.logo.path) sablon_logo_url = "{}{}".format(request.url_root.strip('/'), logo_url) return sablon_logo_url
def get(): """Ayarlar ekraninin goruntulendigi view""" universite_id = SessionHandler.universite_id() genel_ayar = DB.session.query(GenelAyarlar).filter_by( universite_id=universite_id, aktif_mi=True).first() if genel_ayar and genel_ayar.bap_hakem: form = HakemForm(**genel_ayar.bap_hakem) else: form = HakemForm() return render_template("hakem.html", form=form)
def diger_get(): """ "Diger" ayarlarinin görüntülendigi view """ diger_formu = DigerFormu() universite_id = SessionHandler.universite_id() genel_ayarlar = DB.session.query(GenelAyarlar).filter_by( universite_id=universite_id, aktif_mi=True).first() if genel_ayarlar and genel_ayarlar.bap_diger: diger_formu = DigerFormu(**genel_ayarlar.bap_diger) return render_template('diger.html', diger_formu=diger_formu)
def kurum_kodlari_kaydet(): """ Butce kodlarinin kaydedildigi view """ butce_kodlari_form = ButceKodlari(request.form) universite_id = SessionHandler.universite_id() if not butce_kodlari_form.validate(): flash(_("Lütfen hatalı yerleri düzeltip tekrar deneyin.")) fonksiyonel_kodlar_form = FonksiyonelKodlar() hesap_kodu_search_form = HesapKodlariSearch() return render_template( 'butce_kodlari_listeleme.html', fonksiyonel_kodlar=fonksiyonel_kodlar_form, hesap_kodu_search_form=hesap_kodu_search_form, butce_kodlari_formu=butce_kodlari_form) butce_kodlari_form_data = dict(butce_kodlari_form.data) butce_kodlari_form_data.pop('csrf_token') eski_genel_ayarlar = DB.session.query(GenelAyarlar).filter_by( universite_id=universite_id, aktif_mi=True).first() if eski_genel_ayarlar: yeni_data = eski_genel_ayarlar.to_dict()["bap_butce"] yeni_data.update(butce_kodlari_form_data) yeni_ayarlar = genel_ayarlar_guncelle( eski_genel_ayarlar, guncellenecek_field="bap_butce", yeni_data=yeni_data) else: yeni_ayarlar = GenelAyarlar(universite_id=universite_id, bap_butce=butce_kodlari_form_data) DB.session.add(yeni_ayarlar) DB.session.commit() flash(_("İşlem başarıyla gerçekleşti.")) signal_payload = { "message_type": USER_ACTIVITY_MESSAGES.get("bap").get( "butce_kodlari_kaydet").type_index, "nesne": 'GenelAyarlar', "nesne_id": yeni_ayarlar.id, "ekstra_mesaj": "{} adlı kullanıcı, bap bütçe kurum kodları ayarlarını güncelledi." .format(current_user.username) } signal_sender(**signal_payload) return redirect( url_for("butce.ButceKodlariView:butce_kodlari_goruntuleme"))
def qry(self): """ProjeMesaj BaseQuery""" system_user = SessionHandler.system_user() sp_id = system_user['person_id'] return DB.session.query(ProjeMesaj).join( Proje, ProjeMesaj.proje_id == Proje.id).join( Mesaj, Mesaj.id == ProjeMesaj.mesaj_id).join( Person, Mesaj.gonderen == Person.id).add_columns( Proje.proje_basligi, Proje.id.label("proje_id"), Proje.proje_no, Mesaj.okundu, Mesaj.gonderim_zamani, Mesaj.baslik, Person.ad.label("gonderen_ad"), Person.soyad.label("gonderen_soyad")).filter( Mesaj.gonderen == sp_id)
def detayli_hesap_kodlari_search(self): """ Butce detaylı hesap kodlarinin search edildigi view """ search_query = DB.session.query(DetayliHesapPlanlari) form_data = request.form.to_dict() search_form = HesapKodlariSearch(**form_data) universite_id = SessionHandler.universite_id() genel_ayarlar = DB.session.query(GenelAyarlar).filter_by( universite_id=universite_id, aktif_mi=True).first() if not search_form.validate(): total_record = search_query.count() result = search_query.offset(form_data['start']).limit( form_data['length']).all() return self.process_data(result, form_data, total_record) if search_form.kod.data: search_query = search_query.filter( DetayliHesapPlanlari.hesap_kodu.ilike('%' + search_form.kod.data + '%')) if search_form.aciklama.data: search_query = search_query.filter( DetayliHesapPlanlari.ana_hesap_hesap_grubu_yardimci_hesap_adi. ilike('%' + search_form.aciklama.data + '%')) if genel_ayarlar: if genel_ayarlar.bap_butce: # detayli_hesap_kodlari icerisinde 38 li ve 39 ku universiteler icin ayri kodlar # bulunmakta. Eger ayarlar bolumunden kurum kodu girilmis ise ("39.01.00.00" gibi) # parse edilip 38 li veya 39 lu oldugu anlasilir query ona gore atilir. kurum_kodu = genel_ayarlar.bap_butce.get("kurum_kodu") yok_kurum_kodu = kurum_kodu.split(".")[0] try: if int(yok_kurum_kodu) == 38 or int(yok_kurum_kodu) == 39: search_query = search_query.filter( DetayliHesapPlanlari.kurum_turu == int( yok_kurum_kodu)) except Exception as exc: pass total_record = search_query.count() result = search_query.offset(form_data['start']).limit( form_data['length']).all() return self.process_data(result, form_data, total_record)
def filter_birim(self): """ select2 tarafından query_param olarak gönderilen "q" değişkeni alınıp birim tablosunda "ad" ve "uzun_ad" fieldlarında arama yapılır. "q" değişkeni içeren "ad" veya "uzun_ad" varsa gerekli degerler return edilir Returns: { "items": [{ "id":1, "text": "İktisat"},...], "total_count": number_of_total_row, } """ self.check_request_params() ust_birim_id = request.form.get("dependant_value") kurum_ici = request.form.get("kurum_ici") birim_tipi = request.form.get("birim_tipi") query = DB.session.query(Birim).options(load_only("id", "uzun_ad")) if self.query_data: filter_param = or_(Birim.ad.ilike("%" + self.query_data + "%"), Birim.uzun_ad.ilike("%" + self.query_data + "%")) if kurum_ici == 'true': universite_id = SessionHandler.universite_id() if birim_tipi == BirimTipiEnum.fakulte.value: ust_birim_id = universite_id if ust_birim_id: filter_param = and_(filter_param, Birim.ust_birim_id == ust_birim_id) if birim_tipi: filter_param = and_(filter_param, Birim.birim_tipi == birim_tipi) query = query.filter(filter_param) else: query = query.filter(Birim.id == self.initial_val) return self.prepare_response(query)
def butce_kodlari_goruntuleme(): """ Butce kodlarinin goruntulendigi view """ universite_id = SessionHandler.universite_id() genel_ayar = DB.session.query(GenelAyarlar).filter_by( universite_id=universite_id, aktif_mi=True).first() hesap_kodu_search_form = HesapKodlariSearch() if genel_ayar and genel_ayar.bap_butce: kurum_kodlari_form = ButceKodlari(**genel_ayar.bap_butce) fonksiyonel_kodlar_form = FonksiyonelKodlar(**genel_ayar.bap_butce) else: kurum_kodlari_form = ButceKodlari() fonksiyonel_kodlar_form = FonksiyonelKodlar() return render_template("butce_kodlari_listeleme.html", butce_kodlari_formu=kurum_kodlari_form, fonksiyonel_kodlar=fonksiyonel_kodlar_form, hesap_kodu_search_form=hesap_kodu_search_form)
def diger_post(): """ "Diger" ayarlarinin kaydedildigi view """ diger_formu = DigerFormu(request.form) if diger_formu.validate(): universite_id = SessionHandler.universite_id() diger_ayarlar_data = dict(diger_formu.data) diger_ayarlar_data.pop('csrf_token') diger_ayarlar_data['yayinlar'].pop('csrf_token') diger_ayarlar_data['firma'].pop('csrf_token') diger_ayarlar_data['diger'].pop('csrf_token') genel_ayarlar = DB.session.query(GenelAyarlar).filter_by( universite_id=universite_id, aktif_mi=True).first() if genel_ayarlar: yeni_ayarlar = genel_ayarlar_guncelle(genel_ayarlar, "bap_diger", diger_ayarlar_data) else: yeni_ayarlar = GenelAyarlar(universite_id=universite_id, bap_diger=diger_ayarlar_data) DB.session.add(yeni_ayarlar) DB.session.commit() flash(_("İşlem başarıyla gerçekleşti.")) signal_payload = { "message_type": USER_ACTIVITY_MESSAGES.get("ayarlar").get( "bap_proje_guncelle").type_index, "nesne": 'GenelAyarlar', "nesne_id": yeni_ayarlar.id, "ekstra_mesaj": "{} adlı kullanıcı, bap diger ayarlarını güncelledi.".format( current_user.username) } signal_sender(**signal_payload) return render_template('diger.html', diger_formu=diger_formu)
def post(): """ Ayarlarin kaydedildiği view """ form = HakemForm(request.form) if form.validate(): form_data = dict(form.data) form_data.pop('csrf_token') universite_id = SessionHandler.universite_id() genel_ayar = DB.session.query(GenelAyarlar).filter_by( universite_id=universite_id, aktif_mi=True).first() if genel_ayar: yeni_ayarlar = genel_ayarlar_guncelle(genel_ayar, "bap_hakem", form_data) else: yeni_ayarlar = GenelAyarlar(universite_id=universite_id, bap_hakem=form_data) DB.session.add(yeni_ayarlar) DB.session.commit() flash(_("Ayarlarınız başarılı bir şekilde kayıt edildi.")) signal_payload = { "message_type": USER_ACTIVITY_MESSAGES.get("ayarlar").get( "bap_hakem_guncelle").type_index, "nesne": 'GenelAyarlar', "nesne_id": yeni_ayarlar.id, "ekstra_mesaj": "{} adlı kullanıcı, bap hakem ayarlarını güncelledi.".format( current_user.username) } signal_sender(**signal_payload) return redirect(url_for('bap_yonetimi.HakemAyarlarView:get')) return render_template("hakem.html", form=form)
def ayarlari_kaydet(): """ Ayarlarin kaydedildiği view """ form = request.form ayarlar_form = AyarlarForm(form) universite_id = ayarlar_form.site_ayarlari.genel.universite_id.data if ayarlar_form.site_ayarlari.genel.universite_id.data else current_app.config[ "UNIVERSITE_CONFIG_ID"] if not ayarlar_form.validate(): flash( _("Beklenmeyen bir hata oluştu. Lütfen gönderdiğiniz formu kontrol ediniz" )) return render_template("otomasyon-ayarlar.html", form=ayarlar_form) ayar = DB.session.query(SiteAyarlari).filter_by( universite_id=universite_id).first() if not ayar: ayar = SiteAyarlari() ayar.universite_id = universite_id if ayar and ayar.mail_password and not ayarlar_form.mail_sunucu_ayarlari.mail_password.data: ayarlar_form.mail_sunucu_ayarlari.mail_password.data = ayar.mail_password ayarlar_form.mail_sunucu_ayarlari.mail_password_repeat.data = ayar.mail_password logo = request.files.get('site_ayarlari-genel-logo', None) ayarlar = { "site_ayarlari": { "genel": { "site_adi": ayarlar_form.site_ayarlari.genel.site_adi.data, "universite_id": ayarlar_form.site_ayarlari.genel.universite_id.data, "bap_kisa_adi": ayarlar_form.site_ayarlari.genel.bap_kisa_adi.data, "sehir": ayarlar_form.site_ayarlari.genel.sehir.data, "adres": ayarlar_form.site_ayarlari.genel.adres.data, "telefon": ayarlar_form.site_ayarlari.genel.telefon.data, "faks": ayarlar_form.site_ayarlari.genel.faks.data }, "sozlesme_yetkilisi": { "gorevi": ayarlar_form.site_ayarlari.sozlesme_yetkilisi.gorevi.data, "adi_soyadi": ayarlar_form.site_ayarlari.sozlesme_yetkilisi.adi_soyadi. data, } }, "mail_sunucu_ayarlari": { "mail_server": ayarlar_form.mail_sunucu_ayarlari.mail_server.data, "mail_port": ayarlar_form.mail_sunucu_ayarlari.mail_port.data, "mail_use_tls": ayarlar_form.mail_sunucu_ayarlari.mail_use_tls.data, "mail_use_ssl": ayarlar_form.mail_sunucu_ayarlari.mail_use_ssl.data, "mail_username": ayarlar_form.mail_sunucu_ayarlari.mail_username.data, "mail_default_sender": ayarlar_form.mail_sunucu_ayarlari.mail_default_sender.data, "mail_max_emails": ayarlar_form.mail_sunucu_ayarlari.mail_max_emails.data, }, "ebys_ayarlari": { "p_user_id": ayarlar_form.ebys_ayarlari.p_user_id.data if ayarlar_form.ebys_ayarlari.p_user_id else None, "p_token": ayarlar_form.ebys_ayarlari.p_token.data if ayarlar_form.ebys_ayarlari.p_token else None, "integration_url": ayarlar_form.ebys_ayarlari.integration_url.data if ayarlar_form.ebys_ayarlari.integration_url else None, "system_integration_url": ayarlar_form.ebys_ayarlari.system_integration_url.data if ayarlar_form.ebys_ayarlari.system_integration_url else None, "docdefid": ayarlar_form.ebys_ayarlari.docdefid.data if ayarlar_form.ebys_ayarlari.docdefid else None } } if ayarlar_form.site_ayarlari.yoksis_kullanici_bilgisi.yoksis_password.data is not '': ayar.yoksis_password = ayarlar_form.site_ayarlari.yoksis_kullanici_bilgisi.yoksis_password.data ayar.yoksis_kullanici_no = ayarlar_form.site_ayarlari.yoksis_kullanici_bilgisi.yoksis_kullanici_adi.data ayar.params = ayarlar if logo: try: ayar.logo = logo except ValueError as vexc: flash(str(vexc)) return render_template("otomasyon-ayarlar.html", form=ayarlar_form) if ayarlar_form.mail_sunucu_ayarlari.mail_password.data is not '': ayar.mail_password = ayarlar_form.mail_sunucu_ayarlari.mail_password.data try: DB.session.add(ayar) DB.session.commit() except Exception as exc: DB.session.rollback() flash( _("Beklenmeyen bir hata oluştu. Lütfen daha sonra tekrar deneyiniz" )) current_app.extensions['redis'].set( current_app.config['UNIVERSITE_ID'], universite_id) SessionHandler.ebys_ayarlari(update=True) init_mail() signal_payload = { "message_type": USER_ACTIVITY_MESSAGES.get("ayarlar").get( "ayar_guncelle").type_index, "nesne": 'Site Ayarlari', "nesne_id": ayar.id, "ekstra_mesaj": "{} adlı kullanıcı uygulama ayarlarini kaydetti.".format( current_user.username), } signal_sender(**signal_payload) flash("Ayarlarınız başarılı bir şekilde kaydedilmiştir") return redirect(url_for('bap_yonetimi.AyarlarView:ayarlari_goruntule'))
def anonymous_user(self): if Anonymous._anonymous_user: return Anonymous._anonymous_user Anonymous._anonymous_user = SessionHandler.anonymous_user_get_cache() return Anonymous._anonymous_user
def muhasebe_fisi_olustur_post(self, satinalma_id, siparis_id): """ Muhasebe fisi olusturma kaydeden view methodu :param satinalma_id: ilgili satinalma id :param siparis_id: muhasebe fisinin kesilecegi siparis id """ # todo: kasa bilgileri gosterilecek! try: universite_id = SessionHandler.universite_id() satinalma = get_satinalma_with_related_fields(satinalma_id=satinalma_id) proje = self.get_proje_for_muhasebe_fisi(satinalma.proje_id) proje_bilgiler_data = self.get_proje_bilgileri(proje) genel_ayarlar = DB.session.query(GenelAyarlar).filter_by(universite_id=universite_id, aktif_mi=True).first() fonksiyonel_kod_choices = self.get_fonksiyonel_kod_choices( genel_ayarlar.bap_butce.get("fonksiyonel_kodlar", None) ) siparis = self.get_siparis_with_firma_and_talep_kalemleri(siparis_id) kdv_dahil_tutar = kdv_dahil_fiyat_hesabi(siparis.kazanan_firma_teklif.teklif, siparis.kazanan_firma_teklif.kdv_orani) proje_kalemi = siparis.satinalma_talep_kalemleri.proje_kalemi proje_kalemi_data = self.get_proje_kalemi_data(proje_kalemi, kdv_dahil_tutar) muhasebe_fis_formu = MuhasebeFisiForm(request.form) for fis_maddesi in muhasebe_fis_formu.fis_maddeleri: fis_maddesi.fonksiyonel_kod.choices = fonksiyonel_kod_choices if not muhasebe_fis_formu.validate(): return render_template("satinalma_dashboard/muhasebe_fisi_olustur.html", muhasebe_fis_formu=muhasebe_fis_formu, proje_bilgileri=proje_bilgiler_data, proje_kalemi_data=proje_kalemi_data, satinalma=satinalma, satinalma_id=satinalma_id, siparis_id=siparis_id) # belge numarasinin daha once atanmis olma durumu kontrol edilir belge_numarasi_exist = DB.session.query(exists().where( MuhasebeFisi.muhasebe_fis_no == muhasebe_fis_formu.fis_genel_bilgileri.belge_numarasi.data)).scalar() if belge_numarasi_exist: oneri_belge_numarasi = "{}{}".format(date.today().year, siparis_id) hata_mesaji = "Muhasebe fişi belge numarası kullanılmaktadır. (Öneri belge " \ "numarası {})".format(oneri_belge_numarasi) muhasebe_fis_formu.fis_genel_bilgileri.belge_numarasi.errors.append(hata_mesaji) return render_template("satinalma_dashboard/muhasebe_fisi_olustur.html", muhasebe_fis_formu=muhasebe_fis_formu, proje_bilgileri=proje_bilgiler_data, proje_kalemi_data=proje_kalemi_data, satinalma=satinalma, satinalma_id=satinalma_id, siparis_id=siparis_id) proje_kalemi = siparis.satinalma_talep_kalemleri.proje_kalemi talep_edilen_miktar = siparis.satinalma_talep_kalemleri.talep_miktari # firma teklifi kabul edildigi zaman firmanin teklifinin kdv dahil tutari rezerv # butce olarak proje kalemine eklenmisti. Muhasebe fisi olusturuldugu anda rezerv # edilen para kullanilan paraya aktarilir proje_kalemi.rezerv_butce = proje_kalemi.rezerv_butce - kdv_dahil_tutar proje_kalemi.kullanilan_butce = proje_kalemi.kullanilan_butce + kdv_dahil_tutar # proje yurutucusu satinalma talebi yaptigi anda talep edilen miktar rezerv edilmisti # Muhasebe fisi olusturuldugu anda rezerv miktar kullanilan miktara aktarilir proje_kalemi.rezerv_edilen_miktar = proje_kalemi.rezerv_edilen_miktar - talep_edilen_miktar proje_kalemi.kullanilan_miktar = proje_kalemi.kullanilan_miktar + talep_edilen_miktar proje_bilgileri_data = self.get_proje_bilgileri(proje) yeni_muhasebe_fisi = self.muhasebe_fisi_kaydet( muhasebe_fis_formu, proje_bilgileri_data["proje_no"], proje_bilgileri_data["proje_yurutucu_ad_soyad"], satinalma_id=satinalma_id, fis_tutari=kdv_dahil_tutar ) DB.session.add(yeni_muhasebe_fisi) DB.session.flush() self.muhasebe_fis_maddesi_kaydet(muhasebe_fis_formu.fis_maddeleri, yeni_muhasebe_fisi.id) siparis.satinalma_talep_kalemleri.muhasebe_fis_id = yeni_muhasebe_fisi.id siparis.siparis_durumu = SiparisDurumu.siparis_tamamlandi projenin_bagli_oldugu_kasa = proje.gelir_kasasi projenin_bagli_oldugu_kasa.rezerv_para -= kdv_dahil_tutar projenin_bagli_oldugu_kasa.harcanan_para += kdv_dahil_tutar signal_payload = { "message_type": USER_ACTIVITY_MESSAGES.get("bap").get("muhasebe_fisi_olusturuldu").type_index, "nesne": 'Proje', "nesne_id": proje.id, "ekstra_mesaj": "{} isimli kullanıcı {} id'li projenin {} id'li proje kaleminde " "yapilan satınalma sonucu {} id 'li {} TL tutarında muhasebe fişi " "oluşturdu".format( current_user.username, proje.id, proje_kalemi.id, yeni_muhasebe_fisi.id, kdv_dahil_tutar ) } signal_sender(**signal_payload) DB.session.commit() flash(_("Muhasebe fişi başarıyla oluşturulmuştur."), category="success") return redirect(url_for("satinalma.SatinalmaMuhasebeFisleri:muhasebe_fisleri", satinalma_id=satinalma_id)) except Exception as exc: DB.session.rollback() CustomErrorHandler.error_handler(hata="Satinalma muhasebe fişi listesi görüntülenirken " "hata oluştu.Hata: {}, Satinalma id: {}".format( satinalma_id, exc) ) return abort(500)
def muhasebe_fisi_olustur_get(self, satinalma_id, siparis_id): """ Muhasebe fisi olusturma ekrani :param satinalma_id: ilgili satinalma id :param firma_id: muhasebe fisinin kesilecegi firma id """ try: universite_id = SessionHandler.universite_id() satinalma = get_satinalma_with_related_fields(satinalma_id=satinalma_id) proje = self.get_proje_for_muhasebe_fisi(satinalma.proje_id) siparis = self.get_siparis_with_firma_and_talep_kalemleri(siparis_id) if not siparis: flash(_("Böyle bir sipariş bulunamadı"), category="error") return redirect(url_for("satinalma.SatinalmaMuhasebeFisleri:muhasebe_fisleri", satinalma_id=satinalma_id)) if siparis.satinalma_talep_kalemleri.muhasebe_fis_id: flash(_("Bu sipariş için daha önce muhasebe fişi oluşturdunuz."), category="error") return redirect(url_for("satinalma.SatinalmaMuhasebeFisleri:muhasebe_fisleri", satinalma_id=satinalma_id)) proje_bilgiler_data = self.get_proje_bilgileri(proje) genel_ayarlar = DB.session.query(GenelAyarlar).filter_by(universite_id=universite_id, aktif_mi=True).first() firma_bilgileri = siparis.kazanan_firma_teklif.satinalma_teklif.firma kisi_bilgileri = self.get_kisi_bilgiler(firma_bilgileri) kdv_dahil_alacak = kdv_dahil_fiyat_hesabi(siparis.kazanan_firma_teklif.teklif, siparis.kazanan_firma_teklif.kdv_orani) proje_kalemi = siparis.satinalma_talep_kalemleri.proje_kalemi proje_kalemi_data = self.get_proje_kalemi_data(proje_kalemi, kdv_dahil_alacak) fatura_bilgisi_data = self.get_fatura_bilgileri(siparis) muhasebe_fis_formu = self.init_muhasebe_fisi_form(genel_ayarlar, kisi_bilgileri, kdv_dahil_alacak, proje, fatura_bilgisi_data) # simdiki yil ve siparis id birlesiminden belge numarasi uretir belge_numarasi = "{}{}".format(date.today().year, siparis.id) muhasebe_fis_formu.fis_genel_bilgileri.belge_numarasi.data = belge_numarasi except Exception as exc: CustomErrorHandler.error_handler(hata="Satinalma muhasebe fişi listesi görüntülenirken " "hata oluştu.Hata: {}, Satinalma id: {}".format( satinalma_id, exc) ) return abort(500) return render_template("satinalma_dashboard/muhasebe_fisi_olustur.html", muhasebe_fis_formu=muhasebe_fis_formu, proje_bilgileri=proje_bilgiler_data, proje_kalemi_data=proje_kalemi_data, satinalma=satinalma, satinalma_id=satinalma_id, siparis_id=siparis_id)
def post_login_view(): """ Kullanıcıyı kullanıcı adı ve parolası ile doğrular. Returns: """ default_url = url_for('index') form = UserLoginForm(request.form) password = sha512(form.password.data.encode()).hexdigest() user = DB.session.query(User).filter_by(username=form.username.data, password=password).first() if form.validate() and user: # success firma = DB.session.query(BapFirma).filter( BapFirma.user_id == user.id).first() if firma and not firma.onaylandi and not firma.faaliyet_durumu: # firma girisi basarisiz flash( _("Firmanız, Bap tarafından henüz onaylanmadığı için " "veya kabul edilmediği için giriş yapamıyorsunuz.")) return redirect(url_for('auth.login')) if not user.durumu: flash( "Giriş başarısızdır. Lütfen ilgili birimle irtibat kurunuz." ) return redirect(url_for('.login')) try: user_ad = "{} {}".format(user.person.ad, user.person.soyad) except AttributeError: user_ad = user.username if not login_user(user): return Response(_('Kullanıcı aktif değil'), 401) SessionHandler.session_login_set(user=user, user_ad=user_ad) current_app.logger.debug('Logged in user %s', user.username) user_role = DB.session.query(Role).filter( Role.id == session.get('current_role')).first() ekstra_mesaj = "" if firma and firma.onaylandi and firma.faaliyet_durumu: # firma girisi basarili default_url = url_for( 'firma.BapFirmaIslemleriView:firma_dashboard') ekstra_mesaj = "{} {}, {} rolu ile firma girişi yapıldı".format( firma.yetkili_adi, firma.yetkili_soyadi, user_role.name) signal_payload = { "message_type": USER_ACTIVITY_MESSAGES.get("auth").get("login").type_index, "nesne": 'User', "nesne_id": user.id, "ekstra_mesaj": ekstra_mesaj if ekstra_mesaj else "{} {}, {} rolü ile giriş yaptı.".format( user.person.ad, user.person.soyad, user_role.name), } signal_sender(**signal_payload) if request.headers.environ.get('HTTP_X_REQUESTED_WITH'): # response for ajax call return Response('', 302) # to delete flask_login message session.pop('_flashes', None) # Useri logout etmek icin gereklidir. user.session_id = session.sid DB.session.commit() role_dashboard = { 2: url_for( 'bap_yetkilisi_dashboard.BapYetkilisiDashboardView:index'), 3: url_for('proje.ProjeYurutucuDashboard:genel'), 4: url_for( 'hakem_dashboard.HakemDashboard:hakem_proje_degerlendirme_istekleri' ), 5: url_for( 'bap_yetkilisi_dashboard.BapYetkilisiDashboardView:index'), 8: url_for( 'bap_yetkilisi_dashboard.BapYetkilisiDashboardView:rektor_kokpiti' ) } role_id = None if user.roles: role_id = user.roles[0].id if role_dashboard.get(role_id, None): default_url = role_dashboard.get(role_id) # response for /auth/login page next_url = request.args.get('next', default_url) resp = make_response(redirect(next_url)) if not request.cookies.get("introSeen", None): resp.set_cookie("introSeen", "false") return resp else: success_msg = None if request.args.get('new_user'): success_msg = _( 'Başarıyla kayıt oldunuz. Lütfen giriş yapınız.') args = { 'success_msg': success_msg, 'title': _('Giriş Yap'), 'footer': _('Bütün hakları saklıdır') } if not form.errors: args['unknown_error'] = _('Kullanıcı adı veya Parola yanlış.') return render_template('login.html', form=form, args=args)
def signal_sender(log=True, notification=False, sms=False, email=False, database=False, notification_sender=None, notification_receiver=None, notification_message=None, notification_title=None, proje_id=None, **payload): """ User aktivitelerinden olusan eventlerin track edilmesini ve gerekli ise yeni actionlar alinmasini saglayan metot. Examples: For only log purposes: log_message = "Message to log" signal_sender(payload={"log_message": log_message}) For sending notification: payload = { "nesne": "Rol", "nesne_id": 5, "ekstra_mesaj": "5 idli Rol update edildi.", "notification_receiver": 27, "notification_title": "Rol Update Başarılı", } ntf_message = "Message to send as a notification" signal_sender(notification=True, notification_message=ntf_message, **payload) // sender göndermediğimiz için sender current_user oldu. Args: log (bool): Log kaydi olsun/olmasin notification (bool): System notificationi gonderilsin/gonderilmesin sms (bool): Sms gonderilsin/gonderilmesin email (bool): Email gonderilsin/gonderilmesin database (bool): notification_sender (str): notification_message (str): **payload (dict): Gelen parametrelerin tetikleyecegi actiona gore gerekecek datayi iceren dictionary * nesne (str): adi, * nesne_id (int): id, * etkilenen_nesne (str): adi, * etkilenen_nesne (int): id, * ekstra_mesaj (str): , Returns: """ payload.update({ "zaman": datetime.now(), "session": session.get("_id"), "context": session.get("activity_context"), "user_id": current_user.id, "username": current_user.username, "user_role_id": session.get('current_user_role'), "role_id": session.get('current_role'), "role_name": session.get('current_role_name'), "remote_ip": request.remote_addr, "tarayici_bilgisi": request.headers.get('User-Agent'), "host": request.headers.get('Host'), "origin": request.headers.get('Origin'), "referer": request.headers.get('Referer'), "cookie": request.headers.get('Cookie'), "endpoint_url": request.base_url, "method": request.method, }) sender = current_app._get_current_object() # pylint: disable=protected-access if log: activity_log_signal.send(sender, **payload) if notification: if not notification_sender: system_user = SessionHandler.system_user() notification_sender = system_user['person_id'] if not notification_message: notification_message = payload['ekstra_mesaj'] payload['notification_message'] = notification_message payload['notification_sender'] = notification_sender payload['notification_receiver'] = notification_receiver payload['notification_title'] = notification_title payload['proje_id'] = proje_id notification_signal.send(sender, **payload) if sms: sms_signal.send(sender, **payload) if email: system_user = SessionHandler.system_user() payload['email_system_person_id'] = system_user['person_id'] email_signal.send(sender, **payload) if database: # todo: database pass
def send_mail_with_template(recipients: list, subject, content_text, logo_src=None, logo_text=None, logo_href=None, title_text=None, greeting=None, greeting_name=None, button_href=None, button_text=None, content_end_text=None, footer_text=None, template=None, attachments=None, cc=None, bcc=None, body=None, sender=None): """ :param recipients: recipient mail addresses. List of strings :param subject: subject of the mail. Passed to Message instance :param logo_src: url of logo passed to template, default : logo located in SiteAyarlari or Zopsedu logo :param logo_text: logo text located under the logo, passed to template. :param logo_href: href value passed to both logo_text and logo_url :param title_text: title text passed to template :param greeting: greeting for the greeting name, passed to template :param greeting_name: greeting name, passed to the template :param content_text: content text, passed to the template :param button_href: href value of button, passed to the template :param button_text: text value of button, passed to the template :param content_end_text: content end text, passed to the template :param footer_text: footer text passed to template :param template: template name for the send mail. Gets used for rendering the mail. :param attachments: A list of Attachment instances, gets added to the Message instance :param cc: CC mail addresses. List of strings :param bcc: BCC mail addresses. List of strings :param body: Plain text value for body of mail. Passed to Message instance :param sender: Sender mail address of mail. default: default sender mail address set while initiating mail instance :return: returns rendered template html """ ayarlar = DB.session.query(SiteAyarlari).filter_by( universite_id=SessionHandler.universite_id()).first() genel_ayarlar = None if ayarlar and ayarlar.params and ayarlar.params[ "site_ayarlari"] and ayarlar.params["site_ayarlari"]["genel"]: genel_ayarlar = ayarlar.params["site_ayarlari"]["genel"] if not logo_src: if ayarlar and ayarlar.logo and genel_ayarlar: logo_src = "{}{}".format(genel_ayarlar["site_adi"], ayarlar.logo.url) logo_href = genel_ayarlar["site_adi"] else: logo_src = 'http://v2.zopsedu.net/static/assets/img/brand-logo2-white.png' if template is None: # sablon tipi 52 email sablonunu isaret eder. degistirilmemelidir. guncel_email_sablonu = DB.session.query(Sablon).filter( Sablon.kullanilabilir_mi == True, Sablon.sablon_tipi_id == 52).order_by(desc( Sablon.updated_at)).first() template = guncel_email_sablonu.sablon_text if not footer_text and genel_ayarlar: footer_text = """ <strong>Telefon: {}</strong><br> <strong>Faks: {}</strong><br> <strong>Adres: {}</strong><br> """.format(genel_ayarlar.get("telefon", "-"), genel_ayarlar.get("faks", "-"), genel_ayarlar.get("adres", "-")) html = render_template_string( template, logo_src=logo_src, logo_text=logo_text, logo_href=logo_href, title_text=title_text if title_text else subject, greeting=greeting, greeting_name=greeting_name, content_text=content_text, button_href=button_href, button_text=button_text, content_end_text=content_end_text, footer_text=footer_text, ) msg = Message(recipients=recipients, attachments=attachments, cc=cc, bcc=bcc, body=body, sender=sender, subject=subject) msg.html = html current_app.extensions['mail'].send(msg) return html
def mail_gonder(recipients: list, subject, content_text, sender, proje_id=None, **mail_params): """ Recipients = [ { "email": "*****@*****.**" "person_id": 1 }, { "email": "*****@*****.**" "person_id": 2 }, ] :param recipients: list of dict :param sender: mesaji gonderen kisinin person id si. Genel olarak system userdir. :param subject: mesaj konusu :param content_text: mesaj içerigi :param proje_id: eger gonderilecek mail proje ile alakali ise proje mesajlarina eklenmesi icin bu parametre gereklidir :param mail_params: send_mail_with_template icin gerekli parametreleri icerir :return: """ with app.app_context(): if not sender: system_user = SessionHandler.system_user() sender = system_user["user_id"] email_list = [] person_ids = [] for recipient in recipients: email_list.append(recipient["email"]) person_ids.append(recipient["person_id"]) send_mail_with_template(recipients=email_list, sender=None, subject=subject, content_text=content_text, **mail_params) for person_id in person_ids: try: mesaj = Mesaj(gonderen=sender, alici=person_id, baslik=subject, metin=content_text, gonderim_zamani=datetime.now(), mesaj_tipi=MesajTipleri.eposta) DB.session.add(mesaj) DB.session.flush() if proje_id: proje_mesaj = ProjeMesaj(mesaj_id=mesaj.id, proje_id=proje_id) DB.session.add(proje_mesaj) DB.session.commit() except Exception as exc: DB.session.rollback() current_app.logger.error( "Mail gönderilmeye calisilirken bir hata ile " "karsilasildi. Hata: {}".format(exc))