Пример #1
0
    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'))
Пример #2
0
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()
Пример #3
0
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()
Пример #4
0
    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
Пример #5
0
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)
Пример #6
0
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
Пример #7
0
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
Пример #8
0
    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)
Пример #9
0
    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)
Пример #10
0
    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"))
Пример #11
0
    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)
Пример #12
0
    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)
Пример #13
0
    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)
Пример #14
0
    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)
Пример #15
0
    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)
Пример #16
0
    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)
Пример #17
0
    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'))
Пример #18
0
 def anonymous_user(self):
     if Anonymous._anonymous_user:
         return Anonymous._anonymous_user
     Anonymous._anonymous_user = SessionHandler.anonymous_user_get_cache()
     return Anonymous._anonymous_user
Пример #19
0
    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)
Пример #20
0
    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)
Пример #21
0
    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)
Пример #22
0
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
Пример #23
0
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
Пример #24
0
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))