Beispiel #1
0
def proje_ek_dosyalar_kaydet(user_id, proje_id, form_ek_dosyalar,
                             proje_belgeleri, taslak_mi):
    """Proje başvurusu ek dosyalarını kaydeden method"""
    for ek_dosya in form_ek_dosyalar:
        if ek_dosya.proje_turu_ek_dosya_id.data:
            for kayitli_ek_dosya in proje_belgeleri:
                if kayitli_ek_dosya.proje_turu_ek_dosya_id == \
                        ek_dosya.proje_turu_ek_dosya_id.data:
                    yeni_dosya = request.files.get(ek_dosya.yeni_dosya.name,
                                                   None)
                    if yeni_dosya:
                        file = File(content=yeni_dosya, user_id=user_id)
                        DB.session.add(file)
                        DB.session.flush()
                        kayitli_ek_dosya.belge_id = file.id
                        ek_dosya.yeni_dosya.id = file.id
                    kayitli_ek_dosya.aciklama = ek_dosya.yeni_dosya_aciklama.data
                    break
            else:
                yeni_dosya = request.files.get(ek_dosya.yeni_dosya.name, None)
                if yeni_dosya:
                    file = File(content=yeni_dosya, user_id=user_id)
                    DB.session.add(file)
                    DB.session.flush()
                    proje_belge = ProjeBelgeleri(
                        aciklama=ek_dosya.yeni_dosya_aciklama.data,
                        proje_id=proje_id,
                        belge_id=file.id,
                        proje_turu_ek_dosya_id=ek_dosya.proje_turu_ek_dosya_id.
                        data)
                    DB.session.add(proje_belge)
                elif ek_dosya.ek_dosya_zorunlu_mu.data and not taslak_mi:
                    flash(_("Zorunlu ek dosyaları yüklemeniz gerekmektedir."),
                          "error")
Beispiel #2
0
def proje_diger_dosya_kaydet(
    user_id,
    proje_id,
    proje_diger,
    proje_belgeleri,
):
    """Proje başvurusu diger dosyalari kaydeden method"""
    var_olan_dosyalar = []
    for dosya in proje_diger.dosyalar:
        for kayitli_diger_dosya in proje_belgeleri:
            if dosya.proje_belge_id.data == kayitli_diger_dosya.id:
                yeni_dosya = request.files.get(dosya.dosya_id.name, None)
                if yeni_dosya:
                    file = File(content=yeni_dosya, user_id=user_id)
                    DB.session.add(file)
                    DB.session.flush()
                    kayitli_diger_dosya.belge_id = file.id
                kayitli_diger_dosya.baslik = dosya.ad.data
                kayitli_diger_dosya.aciklama = dosya.aciklama.data
                var_olan_dosyalar.append(kayitli_diger_dosya.id)
                break
        else:
            yeni_dosya = request.files.get(dosya.dosya_id.name, None)
            if yeni_dosya:
                file = File(content=yeni_dosya, user_id=user_id)
                DB.session.add(file)
                DB.session.flush()
                proje_belgesi = ProjeBelgeleri(proje_id=proje_id,
                                               belge_id=file.id,
                                               baslik=dosya.ad.data,
                                               aciklama=dosya.aciklama.data)
                DB.session.add(proje_belgesi)
                DB.session.flush()
                var_olan_dosyalar.append(proje_belgesi.id)
    return var_olan_dosyalar
Beispiel #3
0
    def proje_turu_ek_dosya_olustur(proje_turu_id, form_ek_dosyalar):
        """
        Form_ek_dosyalar argumanındaki verilerden ek_dosyalar modelinden instance oluşturur.
        proje_turu_id aracılıgıyla proje türü modeliyle relation kurulur.
        Args:
            proje_turu_id(Int): ilişkilendirilecek proje türünün id si
            form_ek_dosyalar(Form): verilerin bulunduğu formun ek dosyalar bölümü

        Returns:

        """
        for ek_dosya in form_ek_dosyalar:
            request_file = request.files.get(ek_dosya.belge.file_id.name, None)
            if request_file:
                file = File(content=request_file, user_id=current_user.id)
                DB.session.add(file)
                DB.session.flush()
                bap_belge = BAPBelge(adi=ek_dosya.belge.adi.data,
                                     file_id=file.id,
                                     aciklama=ek_dosya.belge.adi.data)
                DB.session.add(bap_belge)
                DB.session.flush()
                ek_dosya_obj = EkDosya(proje_turu_id=proje_turu_id,
                                       dosya_id=bap_belge.id,
                                       zorunlu_mu=ek_dosya.zorunlu_mu.data,
                                       proje_icerik_dosyasi_mi=ek_dosya.
                                       proje_icerik_dosyasi_mi.data,
                                       belgenin_ciktisi_alinacak_mi=ek_dosya.
                                       belgenin_ciktisi_alinacak_mi.data)
                DB.session.add(ek_dosya_obj)
Beispiel #4
0
    def ozgecmis_kaydet(self):
        """Ozgecmis Kaydetme Ekrani
        """
        kayit_formu = OzgecmisKayitFormu(request.form)

        ozgecmis = Ozgecmis.query.filter(
            Ozgecmis.user_id == current_user.get_id()).one()
        ozgecmis_dosya = request.files.get(kayit_formu.ozgecmis_dosya.name,
                                           None)

        if not kayit_formu.validate():
            flash("Lütfen uygun dosya uzantısı olan bir özgeçmiş yükleyiniz.")
            return redirect(
                url_for(
                    'kullanici_profil.KullaniciProfilView:ozgecmis_goruntule'))
        if ozgecmis_dosya:
            _ozgecmis_dosya = File(content=ozgecmis_dosya)
            DB.session.add(_ozgecmis_dosya)
            DB.session.flush()

            ozgecmis.file_id = _ozgecmis_dosya.id
            DB.session.add(ozgecmis)
            DB.session.commit()
        else:
            ozgecmis.tecrube = kayit_formu.tecrube.data
            DB.session.add(ozgecmis)
            DB.session.commit()

        flash("Özgeçmişiniz başarılı bir şekilde kaydedilmiştir.")

        return redirect(
            url_for('kullanici_profil.KullaniciProfilView:ozgecmis_goruntule'))
Beispiel #5
0
def file(fid=None):
    """File Modeli olusturur"""

    with open(f_path, 'br') as sample_file:
        return File(
            user_id=fid,
            content=sample_file,
            uploaded_at=f.date()
        )
Beispiel #6
0
    def post_belge_sablonlari(self):
        """
        Varsayilan belge sablonlari yukleme ekrani

        """
        form = self.form()
        sablon_dosya = request.files.get(form.sablon_dosya.name, None)
        sablon_text = form.sablon_text.data
        if not sablon_text and not sablon_dosya:
            flash(_("Dosya yüklemelisiniz veya şablon metni girmelisiniz"))
        elif sablon_text and sablon_dosya:
            flash(_("Aynı anda dosya yükleyip şablon metni giremezsiniz."))
        else:
            if form.validate():
                sablon_tipi_id = form.sablon_tipi_id.data
                sablon_adi = form.sablon_adi.data
                kullanilabilir_mi = form.sablon_kullanilabilir_mi.data
                query_helper_id = form.query_helper_id.data
                sablon_dosya_id = None
                if sablon_dosya:
                    _sablon = File(content=sablon_dosya)
                    DB.session.add(_sablon)
                    DB.session.flush()
                    sablon_dosya_id = _sablon.id

                sablon = Sablon(file=sablon_dosya_id,
                                sablon_tipi_id=sablon_tipi_id,
                                sablon_text=sablon_text or "",
                                module_name="BAP",
                                adi=sablon_adi,
                                kullanilabilir_mi=kullanilabilir_mi,
                                query_id=query_helper_id)

                DB.session.add(sablon)
                DB.session.commit()
                flash("Belge Şablonu başarıyla yüklenmiştir.")
                form = self.form()
                signal_payload = {
                    "message_type":
                    USER_ACTIVITY_MESSAGES.get("ayarlar").get(
                        "bap_sablon_kaydet").type_index,
                    "nesne":
                    'Sablon',
                    "nesne_id":
                    sablon.id,
                    "ekstra_mesaj":
                    "{} adli user, {} id'li bap sablonu kaydetti.".format(
                        current_user.username, sablon.id)
                }
                signal_sender(**signal_payload)
        sablonlar = DB.session.query(Sablon).order_by(Sablon.updated_at).all()

        return render_template("varsayilan_sablonlar.html",
                               sablon_form=form,
                               sablonlar=sablonlar)
Beispiel #7
0
def upload():
    """Sablon yukleme ve sablonun database kayit edilmesi icin kullanilir."""
    uploaded_file = request.files.get('sablon', None)
    if uploaded_file:
        yeni_sablon_file = File(content=uploaded_file)
        DB.session.add(yeni_sablon_file)
        DB.session.flush()
        yeni_sablon = Sablon(file=yeni_sablon_file.id)
        DB.session.add(yeni_sablon)
        DB.session.commit()
    return render_template("template_generator/upload.html")
Beispiel #8
0
    def formlar_ve_belgeler_ayarlar_kaydet():
        form = AnaSayfaDosyaAyarlari(request.form)
        ana_sayfa_dosya = request.files.get(form.file_id.name, None)
        dosya_id = None
        if not form.validate():
            flash("Lütfen uygun dosya uzantısı olan bir dosya yükleyiniz.")
            return redirect(
                url_for(
                    'ana_sayfa_yonetimi.FormlarVeBelgelerAyarlarView:formlar_ve_belgeler_ayarlar'
                ))

        if ana_sayfa_dosya:
            bap_belge = BAPBelge()
            _ana_sayfa_dosya = File(content=ana_sayfa_dosya)
            try:
                DB.session.add(_ana_sayfa_dosya)
                DB.session.flush()
                bap_belge.file_id = _ana_sayfa_dosya.id
                dosya_id = _ana_sayfa_dosya.id
                bap_belge.adi = ana_sayfa_dosya.filename
                bap_belge.tur = BAPBelgeTipi.formlar_ve_belgeler
                DB.session.add(bap_belge)
                DB.session.commit()
            except Exception as exc:
                DB.session.rollback()
                CustomErrorHandler.error_handler(
                    hata="Formlar ve Belgeler oluşturulurken hata"
                    "oluştu.Hata: {}".format(exc))
                flash("Lütfen uygun dosya uzantısı olan bir dosya yükleyiniz.")
                return redirect(
                    url_for(
                        'ana_sayfa_yonetimi.FormlarVeBelgelerAyarlarView:formlar_ve_belgeler_ayarlar'
                    ))

        signal_payload = {
            "message_type":
            USER_ACTIVITY_MESSAGES.get("yonetim").get(
                "formlar_ve_belgeler_eklendi").type_index,
            "nesne":
            'Formlar ve Belgeler Ayarları',
            "nesne_id":
            dosya_id,
            "ekstra_mesaj":
            "Formlar ve Belgeler eklendi: {}".format(dosya_id),
        }
        signal_sender(**signal_payload)

        flash("Formlar ve Belgeler başarılı bir şekilde kaydedilmiştir.")

        return redirect(
            url_for(
                'ana_sayfa_yonetimi.FormlarVeBelgelerAyarlarView:formlar_ve_belgeler_ayarlar'
            ))
Beispiel #9
0
    def firma_kayit():
        """Firma Kayit Ekrani"""
        firma_kayit_formu = FirmaKayitFormu(request.form)
        file = None

        if request.method == "GET" or not firma_kayit_formu.validate():
            return render_template("firma_kayit.html", firma_kayit_formu=firma_kayit_formu)

        firma_faaliyet_belgesi = request.files.get(firma_kayit_formu.firma_faaliyet_belgesi_id.name)
        if firma_faaliyet_belgesi:
            file = File(content=firma_faaliyet_belgesi)
            DB.session.add(file)
            DB.session.flush()
        firma_data = BapFirma.data_to_dict(firma_kayit_formu.data)
        firma_data.pop("firma_faaliyet_belgesi_id")

        yeni_firma = BapFirma(firma_faaliyet_belgesi_id=file.id if file else None,
                              **firma_data)
        DB.session.add(yeni_firma)
        DB.session.commit()

        flash(_("Firma Kayıt İşleminiz Başarıyla Gerçekleşti."))
        return render_template("firma_kayit.html", firma_kayit_formu=firma_kayit_formu)
Beispiel #10
0
    def file_upload(self):
        """
        Dosya yüklemek  için kullanılır.
        jquery file upload ui kütüphanesine göre değer dönülür.

        Returns:

        """

        if len(request.files) > 1 or len(request.files) < 1:
            return jsonify({"error": _("Sadece 1 tane dosya yükleyebilirsiniz.")})
        files = list(request.files.values())
        file = File(content=files[0],
                    user_id=current_user.id)
        try:
            DB.session.add(file)
            DB.session.commit()
            signal_payload = {
                "message_type": USER_ACTIVITY_MESSAGES.get("common").get("dosya_yuklendi").type_index,
                "nesne": 'File',
                "nesne_id": file.id,
                "ekstra_mesaj": "{} adlı kullanıcı, {} adıyla yeni dosya yükledi.".format(
                    current_user.username,
                    file.content.filename)
            }
            signal_sender(**signal_payload)
        except Exception as exc:
            CustomErrorHandler.error_handler()
            return jsonify({"files": [{"error": _("Dosya Yüklenemedi"),
                                       "name": files[0].filename}]})
        return jsonify({"files": [{"name": file.content.filename,
                                   "type": file.content.content_type,
                                   "url": self.DOWNLOAD_URL.format(file.id),
                                   "deleteUrl": self.DELETE_URL.format(file.id),
                                   "deleteType": "DELETE",
                                   "fileId": file.id}]})
    def satinalma_teknik_sartname_post(self, proje_id, satinalma_id):
        """
        Satinalma talep kalemleri teknik sartname duzenleme kaydetme view,

        """
        teknik_sartname_duzenle_form = TeknikSartnameDuzenlemeFormu(
            request.form)

        if not teknik_sartname_duzenle_form.validate():
            return render_template(
                "dashboard/teknik_sarname_duzenle.html",
                proje_id=proje_id,
                satinalma_id=satinalma_id,
                teknik_sartname_duzenle_form=teknik_sartname_duzenle_form)

        satinalma_talebi = DB.session.query(ProjeSatinAlmaTalebi).filter(
            ProjeSatinAlmaTalebi.id == satinalma_id).first()

        for talep_kalemi in satinalma_talebi.talep_kalemleri:
            for talep_kalemi_form in teknik_sartname_duzenle_form.talep_kalemleri:
                if talep_kalemi.id == talep_kalemi_form.talep_kalemi_id.data:
                    yeni_teknik_sartname = request.files.get(
                        talep_kalemi_form.yeni_teknik_sartname.name)
                    yeni_file = File(user_id=current_user.id,
                                     content=yeni_teknik_sartname)
                    DB.session.add(yeni_file)
                    DB.session.flush()
                    talep_kalemi.teknik_sartname_file_id = yeni_file.id
                    talep_kalemi.teknik_sartname_duzenlensin_mi = False

        DB.session.commit()
        payload = {
            "message_type":
            USER_ACTIVITY_MESSAGES.get("bap").get(
                "teknik_sartname_duzenle").type_index,
            "ekstra_mesaj":
            "{} id li satınalmanin talep kalemleri teknik şartname dosyası bap "
            "yetkilisi talebiyle yürütücü tarafından düzenlendi".format(
                satinalma_id),
            "nesne":
            'ProjeSatinAlmaTalebi',
            "nesne_id":
            satinalma_talebi.id,
        }

        signal_sender(notification=True, **payload)

        for yetkili in bap_yetkili_and_admin_ids():
            payload = {
                "message_type":
                USER_ACTIVITY_MESSAGES.get("icerik").get(
                    "satinalma_duyurusu_duzenlendi").type_index,
                "ekstra_mesaj":
                "{} id'li satınalmanın teknik şartname dosyaları {} isimli "
                "kullanıcı tarafından değiştrildi".format(
                    satinalma_id, current_user.username),
                "notification_receiver":
                yetkili.person_id,
                "notification_title":
                "{} İsimli Kullanıcı Teknik Şartname Düzenledi".format(
                    current_user.username),
                "notification_message":
                "{} isimli kullanıcı talep edilen teknik şartname düzenleme "
                "işlemini gerçekleştirdi. Lütfen kontrol ediniz".format(
                    current_user.username),
                "proje_id":
                proje_id
            }
            signal_sender(log=False, notification=True, **payload)
        flash(_("Teknik şartnameler başarıyla düzenlendi."))
        return redirect(url_for("proje.satinalma_talepleri",
                                proje_id=proje_id))
    def satinalma_talebi_kaydet(self, proje_id, butce_kalemi_id):
        """
        Talep Oluşturur

        """

        try:
            satinalma_talep_formu = ProjeSatinAlmaTalepleri(request.form)

            if not satinalma_talep_formu.validate():
                return render_template(
                    "dashboard/proje_satinalma_talep_basvuru.html",
                    proje_id=proje_id,
                    butce_kalemi_id=butce_kalemi_id,
                    satinalma_talep_form=satinalma_talep_formu)

            # mkk ya eklenen uyelerin aynı kişi olma durumuna bakilir
            select_field_list = [
                satinalma_talep_formu.baskan, satinalma_talep_formu.yedek_uye,
                satinalma_talep_formu.yedek_uye2, satinalma_talep_formu.uye,
                satinalma_talep_formu.yedek_baskan, satinalma_talep_formu.uye2
            ]

            seen = set()
            for select_field in select_field_list:
                if select_field.data not in seen:
                    seen.add(select_field.data)
                else:
                    select_field.errors.append(
                        "Komisyon üyesini birden fazla kez dahil ettiniz")

            if not satinalma_talep_formu.validate():
                return render_template(
                    "dashboard/proje_satinalma_talep_basvuru.html",
                    proje_id=proje_id,
                    butce_kalemi_id=butce_kalemi_id,
                    satinalma_talep_form=satinalma_talep_formu)

            genel_teknik_sartname = request.files.get(
                satinalma_talep_formu.genel_teknik_sartname_belge.name, None)
            genel_teknik_sartname_file = None
            if genel_teknik_sartname:
                genel_teknik_sartname_file = File(
                    content=genel_teknik_sartname, user_id=current_user.id)
                DB.session.add(genel_teknik_sartname_file)

            proje_kalemleri = DB.session.query(ProjeKalemi).filter(
                ProjeKalemi.proje_id == proje_id,
                ProjeKalemi.proje_turu_butce_kalem_id ==
                butce_kalemi_id).all()

            satinalma_talebi = ProjeSatinAlmaTalebi(
                proje_id=proje_id,
                butce_kalem_id=butce_kalemi_id,
                mkk_baskan_id=satinalma_talep_formu.baskan.data,
                mkk_uye1_id=satinalma_talep_formu.uye.data,
                mkk_uye2_id=satinalma_talep_formu.uye2.data,
                mkk_yedek_baskan_id=satinalma_talep_formu.yedek_baskan.data,
                mkk_yedek_uye1_id=satinalma_talep_formu.yedek_uye.data,
                mkk_yedek_uye2_id=satinalma_talep_formu.yedek_uye2.data,
            )
            DB.session.add(satinalma_talebi)
            DB.session.flush()

            talep_kalemi_sayisi = 0
            for proje_kalemi in proje_kalemleri:
                for talep in satinalma_talep_formu.talepler:
                    kullanilabilir_miktar = proje_kalemi.toplam_miktar - proje_kalemi.kullanilan_miktar - proje_kalemi.rezerv_edilen_miktar
                    if proje_kalemi.id == talep.proje_kalemi_id.data and talep.secili_mi.data and (
                            kullanilabilir_miktar > 0):
                        if not (0 < talep.talep_edilen_miktar.data <=
                                kullanilabilir_miktar):
                            flash(
                                "Talep edilen miktar sıfırdan büyük ve kullanılabilir miktardan "
                                "küçük olmak zorunda.", "error")
                            break
                        teknik_sartname = request.files.get(
                            talep.teknik_sartname_belge.name, None)
                        if teknik_sartname:
                            teknik_sartname_file = File(
                                content=teknik_sartname,
                                user_id=current_user.id)
                            DB.session.add(teknik_sartname_file)
                            DB.session.flush()
                            talep_teknik_sartname_file_id = teknik_sartname_file.id
                        elif genel_teknik_sartname:
                            talep_teknik_sartname_file_id = genel_teknik_sartname_file.id
                        else:
                            # eger ilgili talebe ozel teknik sartname yuklenmemisse ve genel bir teknik
                            # şartnamede yuklememis ise hata donulur
                            flash("Teknik şartname yüklemek zorundasınız",
                                  "error")
                            break

                        talep_kalemi_sayisi += 1
                        # talep edilen miktar proje kaleminden rezerv edilir
                        proje_kalemi.rezerv_edilen_miktar += talep.talep_edilen_miktar.data
                        talep_kalemi = TalepKalemleri(
                            satinalma_id=satinalma_talebi.id,
                            teknik_sartname_file_id=
                            talep_teknik_sartname_file_id,
                            proje_kalemi_id=proje_kalemi.id,
                            talep_miktari=talep.talep_edilen_miktar.data)
                        DB.session.add(talep_kalemi)

            if not talep_kalemi_sayisi:
                flash(
                    "Satınalma talebini tamamlamak için en az bir kalem seçmelisiniz",
                    "error")

            # eger bir hata var ise db session rollback edilip hatalari kullaniciya gostermek icin
            # ilgili sayfa render edilir
            if get_flashed_messages(category_filter=["error"]):
                DB.session.rollback()
                return render_template(
                    "dashboard/proje_satinalma_talep_basvuru.html",
                    proje_id=proje_id,
                    butce_kalemi_id=butce_kalemi_id,
                    satinalma_talep_form=satinalma_talep_formu)
            # satinalma id si talep numarasi olarak atanir
            satinalma_talebi.talep_numarasi = str(satinalma_talebi.id)
            # st1 state id satinalma durum id olarak atanir
            satinalma_talebi.durum_id = 34

            proje = DB.session.query(Proje.proje_no.label("proje_no")).filter(
                Proje.id == proje_id).first()
            for bap_admin in bap_yetkili_and_admin_ids():
                payload = {
                    "notification_receiver":
                    bap_admin.person_id,
                    "notification_title":
                    "Satınalma Talebi Yapıldı",
                    "notification_message":
                    "{} adlı kullanıcı {} numaralı projede satınalma talebi yaptı"
                    .format(current_user.username, proje.proje_no),
                }

                signal_sender(log=False, notification=True, **payload)

            signal_payload = {
                "message_type":
                USER_ACTIVITY_MESSAGES.get("bap").get(
                    "satinalma_talebi_olustur").type_index,
                "nesne":
                '',
                "nesne_id":
                proje_id,
                "ekstra_mesaj":
                "{} adlı {} id li kullanici satinalma talebi yaptı .".format(
                    current_user.id, current_user.username)
            }
            signal_sender(**signal_payload)
            DB.session.commit()

            flash("Satınalma talebi başarıyla oluşturuldu.", "success")
        except Exception as exc:
            flash(
                "Satınalma talebi yaparken beklenmedik bir sorunla karşılaşıldı. "
                "Lütfen daha sonra tekrar deneyin")
            DB.session.rollback()
            CustomErrorHandler.error_handler()
        return redirect(url_for("proje.satinalma_talepleri",
                                proje_id=proje_id))
Beispiel #13
0
    def firma_kaydet():
        """Firma Kaydeder"""
        firma_kayit_formu = FirmaKayitFormu(request.form)
        file = None

        if not firma_kayit_formu.validate():
            return render_template("firma_kayit.html", firma_kayit_formu=firma_kayit_formu)

        yetkili_kullanici_bilgileri = firma_kayit_formu.yetkili_user_bilgileri.data
        kullanici_varmi = DB.session.query(User).filter(or_(
            User.username == yetkili_kullanici_bilgileri["yetkili_kullanici_adi"],
            User.email == yetkili_kullanici_bilgileri["yetkili_email"]
        )).first()
        if kullanici_varmi:
            DB.session.rollback()
            flash("Geçersiz kullanıcı adı veya yetkili email adresi. "
                  "Lütfen başka bir kullanıcı ismi veya email ile yeniden deneyiniz.")
            return render_template("firma_kayit.html", firma_kayit_formu=firma_kayit_formu)

        firma_faaliyet_belgesi = request.files.get(firma_kayit_formu.firma_faaliyet_belgesi_id.name)
        if firma_faaliyet_belgesi:
            file = File(content=firma_faaliyet_belgesi)
            DB.session.add(file)
            DB.session.flush()
        else:
            flash("Firma faaliyet belgesi yüklemek zorundasınız")
            return render_template("firma_kayit.html", firma_kayit_formu=firma_kayit_formu)

        password = sha512(yetkili_kullanici_bilgileri["password"].encode()).hexdigest()
        # girilen bilgilerden firma icin yetkili bir kullanici yaratilir
        yetkili_kullanici_bilgileri.pop("re_password")
        firma_yetkili_kullanici = User(
            username=yetkili_kullanici_bilgileri["yetkili_kullanici_adi"],
            email=yetkili_kullanici_bilgileri["yetkili_email"],
            password=password)
        DB.session.add(firma_yetkili_kullanici)
        DB.session.flush()

        yeni_person = Person(user_id=firma_yetkili_kullanici.id,
                             ad=firma_kayit_formu.yetkili_adi.data,
                             soyad=firma_kayit_formu.yetkili_soyadi.data,
                             birincil_eposta=firma_kayit_formu.yetkili_user_bilgileri.yetkili_email.data)
        DB.session.add(yeni_person)

        # firma rolunun id si bulunur
        firma_rolu = DB.session.query(RoleModel).filter(RoleModel.name == "BAP Firma").first()

        # firma rolu ve yetkili kullanici arasinda user_role instance olusturulur
        user_role = UserRole(user_id=firma_yetkili_kullanici.id,
                             role_id=firma_rolu.id,
                             rol_tipi=RolTipleri.firma,
                             is_default=True)

        DB.session.add(user_role)
        # girilen bilgilerle yeni firma olusturulur
        yeni_firma = BapFirma(user_id=firma_yetkili_kullanici.id,
                              firma_faaliyet_belgesi_id=file.id,
                              vergi_dairesi_id=firma_kayit_formu.vergi_dairesi_id.data,
                              adres=firma_kayit_formu.adres.data,
                              adi=firma_kayit_formu.adi.data,
                              telefon=firma_kayit_formu.telefon.data,
                              email=firma_kayit_formu.email.data,
                              vergi_kimlik_numarasi=firma_kayit_formu.vergi_kimlik_numarasi.data,
                              faaliyet_belgesi_verilis_tarihi=firma_kayit_formu.faaliyet_belgesi_verilis_tarihi.data,
                              iban=firma_kayit_formu.iban.data,
                              banka_sube_adi=firma_kayit_formu.banka_sube_adi.data,
                              yetkili_adi=firma_kayit_formu.yetkili_adi.data,
                              yetkili_soyadi=firma_kayit_formu.yetkili_soyadi.data,
                              )

        DB.session.add(yeni_firma)
        DB.session.commit()
        signal_payload = {
            "message_type": USER_ACTIVITY_MESSAGES.get("bap").get(
                "firma_kaydet").type_index,
            "nesne": 'BapFirma',
            "nesne_id": yeni_firma.id,
            "ekstra_mesaj": "{} adlı kullanıcı, yeni firma kaydı yaptı.".format(
                current_user.username)
        }
        signal_sender(**signal_payload)

        flash("Firma kayıt işleminiz başarıyla gerçekleşti. "
              "Firma bilgileriniz onaylandıktan sonra sisteme giriş yapabilirsiniz.")
        return render_template("firma_kayit.html", firma_kayit_formu=firma_kayit_formu)
Beispiel #14
0
    def post_satinalma_teklif_dosya_yukle(satinalma_id, firma_id):

        firma_teklif = DB.session.query(FirmaSatinalmaTeklif).filter(
            FirmaSatinalmaTeklif.satinalma_id == satinalma_id,
            FirmaSatinalmaTeklif.firma_id == firma_id,
            FirmaSatinalmaTeklif.teklif_tamamlandi_mi == False
        ).first()

        if not firma_teklif:
            return redirect(url_for("firma.BapFirmaIslemleriView:firma_dashboard"))

        teklif_dosya_formu = TeklifDosyalari(request.form)
        if not teklif_dosya_formu.validate():
            teklif_kalemleri_data = get_teklif_kalemleri_data(firma_teklif.teklif_kalemleri)
            return render_template("teklif_dosya_kaydet.html",
                                   teklif_dosya_formu=teklif_dosya_formu,
                                   teklif_kalemleri_data=teklif_kalemleri_data,
                                   firma_id=firma_id,
                                   satinalma_id=satinalma_id)

        hata_mesajlari = []

        for teklif_dosya in teklif_dosya_formu.dosyalar:
            if teklif_dosya.kategori.data == DosyaKategori.teklif_mektubu:
                break
        else:
            hata_mesajlari.append(_("Teklif mektubu dosyası yüklemek zorundasınız"))

        if hata_mesajlari:
            teklif_kalemleri_data = get_teklif_kalemleri_data(firma_teklif.teklif_kalemleri)
            return render_template("teklif_dosya_kaydet.html",
                                   teklif_dosya_formu=teklif_dosya_formu,
                                   teklif_kalemleri_data=teklif_kalemleri_data,
                                   firma_id=firma_id,
                                   satinalma_id=satinalma_id,
                                   hata_mesajlari=hata_mesajlari)
        try:
            for teklif_dosya in teklif_dosya_formu.dosyalar:
                file = request.files.get(teklif_dosya.dosya.name)
                yeni_file = File(user_id=current_user.id, content=file)
                DB.session.add(yeni_file)
                DB.session.flush()
                firma_teklif_dosya = FirmaTeklifDosya(teklif_id=firma_teklif.id,
                                                      file_id=yeni_file.id,
                                                      aciklama=teklif_dosya.aciklama.data,
                                                      dosya_kategori=teklif_dosya.kategori.data.name)
                DB.session.add(firma_teklif_dosya)

            firma_teklif.teklif_tamamlandi_mi = True

            payload = {
                "message_type": USER_ACTIVITY_MESSAGES.get("bap").get(
                    "firma_satinalma_teklifi_yapti").type_index,
                "ekstra_mesaj": "{} id li satınalmaya {} isimli kullanıcı tarafından teklif yapıldı.".format(
                    satinalma_id,
                    current_user.username),
                "nesne": "FirmaSatinalmaTeklif",
                "nesne_id": firma_teklif.id,
            }
            signal_sender(**payload)

            proje = DB.session.query(Proje.proje_no.label("proje_no")).filter(
                Proje.id == firma_teklif.satinalma.proje_id).first()
            for bap_admin in bap_yetkili_and_admin_ids():
                payload = {
                    "notification_receiver": bap_admin.person_id,
                    "notification_title": "Satınalma talebine firma teklif yaptı",
                    "notification_message": "{} numaralı projenin {} numaralı satınalma talebine {}"
                                            " isimli firmanın yetkilisi tarafından teklif yapıldı.".format(
                        proje.proje_no,
                        firma_teklif.satinalma.talep_numarasi,
                        firma_teklif.firma.adi),
                }

                signal_sender(log=False, notification=True, **payload)

            DB.session.commit()
            flash("Satınalma teklifiniz başarıyla kaydedilmiştir.")
        except Exception as exc:
            DB.session.rollback()
            CustomErrorHandler.error_handler(
                hata="Satınalma firma teklifine dosya eklenirken bir hata meydana geldi."
                     "Satinalma:{}, User:{}, Firma Teklif: {}, Hata:{}".format(satinalma_id,
                                                                               current_user.username,
                                                                               firma_teklif.id,
                                                                               exc))
            flash("Beklenmedik bir hata oluştu. Lütfen daha sonra tekrar deneyiniz.")
        return redirect(url_for("firma.BapFirmaIslemleriView:firma_dashboard"))
Beispiel #15
0
    def proje_turu_guncelle(self, proje_turu_id):
        """
        Proje türünü güncellemek için kullanılacak method
        Args:
            proje_turu_id: güncellenecek proje tünün id si

        Returns:

        """
        proje = DB.session.query(
            Proje.proje_turu).filter(Proje.proje_turu == proje_turu_id).all()
        proje_turu_formu = ProjeTuruFormu(request.form)
        try:
            proje_turu = DB.session.query(ProjeTuru).options(
                joinedload(ProjeTuru.butce),
                joinedload(ProjeTuru.cikti),
                joinedload(ProjeTuru.personel_ayarlari),
                joinedload(ProjeTuru.ek_dosyalar),
            ).filter_by(id=proje_turu_id, guncel_mi=True).one()
        except NoResultFound:
            return redirect(url_for('.proje_turu'))

        if proje:
            flash(
                "Proje türüne proje başvurusu yapılmış. Bu yüzden proje türünü güncelleyemezsiniz.",
                "error")
            return render_template("proje_turu/proje_turu.html",
                                   proje_turu_formu=proje_turu_formu,
                                   proje_turu_id=proje_turu_id,
                                   guncel_mi=proje_turu.guncel_mi,
                                   basvuru_yapilmis_mi=True)

        if not proje_turu_formu.validate():
            hata_listesi = set()

            form_errors_dict_to_set(proje_turu_formu.errors, hata_listesi)

            return render_template("proje_turu/proje_turu.html",
                                   proje_turu_formu=proje_turu_formu,
                                   proje_turu_id=proje_turu_id,
                                   guncel_mi=proje_turu.guncel_mi,
                                   basvuru_yapilmis_mi=False,
                                   hata_mesajlari=hata_listesi)

        if proje_turu.ad != proje_turu_formu.ad.data and DB.session.query(
                ProjeTuru).filter(
                    ProjeTuru.ad == proje_turu_formu.ad.data
                    and ProjeTuru.tur_kodu != proje_turu.tur_kodu).scalar():
            proje_turu_formu.ad.errors.append(
                _("Proje Türü Adı Kullanılmaktadır. Lütfen Başka Bir Ad ile Tekrar Deneyiniz"
                  ))

            return render_template("proje_turu/proje_turu.html",
                                   proje_turu_formu=proje_turu_formu,
                                   proje_turu_id=proje_turu_id,
                                   guncel_mi=proje_turu.guncel_mi,
                                   basvuru_yapilmis_mi=False)

        try:
            proje_turu.update_obj_data(proje_turu_formu.data)
        except ZopseduModelValueError as exc:
            form_field = getattr(proje_turu_formu, exc.field_name, None)
            form_field.errors.append(str(exc))

        genel_uyari_mesajlari = {}
        for uyari_mesaji in PROJE_TURU_UYARI_MESAJ_TIPLERI:
            mesaj = getattr(proje_turu_formu, uyari_mesaji, None)
            if mesaj:
                genel_uyari_mesajlari[uyari_mesaji] = mesaj.data
        proje_turu.genel_uyari_mesajlari = genel_uyari_mesajlari

        try:
            proje_turu.personel_ayarlari.update_obj_data(
                proje_turu_formu.personel_ayarlari.data)
        except ZopseduModelValueError as exc:
            form_field = getattr(proje_turu_formu, exc.field_name, None)
            form_field.errors.append(str(exc))

        try:
            proje_turu.butce.update_obj_data(
                proje_turu_formu.butce_ayarlari.data)

            var_olan_butce_kalemleri = []
            if proje_turu.butce_tercihi == ButceTercihleri.proje_yurutucusu_onersin.name:
                butce_kalemleri_alt_limit = 0
                butce_kalemleri_ust_limit = 0
                for butce_kalemi in proje_turu_formu.butce_kalemleri:
                    butce_kalemleri_alt_limit += butce_kalemi.butce_alt_limiti.data
                    butce_kalemleri_ust_limit += butce_kalemi.butce_ust_limiti.data
                    if butce_kalemi.secili_mi.data:
                        if butce_kalemi.butce_ust_limiti.data > proje_turu.butce.butce_ust_limiti:
                            hata_mesaji = "{} değeri üst limiti bütçe üst limitinden büyük olamaz".format(
                                butce_kalemi.butce_kalemi_adi.data)
                            proje_turu_formu.errors.update({
                                proje_turu_formu.butce_ayarlari.form.butce_ust_limiti.name:
                                hata_mesaji
                            })
                            butce_kalemi.butce_ust_limiti.errors.append(
                                hata_mesaji)
                        for kayitli_kalem in proje_turu.butce_kalemleri:
                            if kayitli_kalem.gider_siniflandirma_id == \
                                    butce_kalemi.gider_siniflandirma_id.data:
                                kayitli_kalem.update_obj_data(
                                    butce_kalemi.data)
                                var_olan_butce_kalemleri.append(
                                    kayitli_kalem.gider_siniflandirma_id)
                                break
                        else:
                            yeni_kalem = ButceKalemi(
                                proje_turu_id=proje_turu.id,
                                gider_siniflandirma_id=butce_kalemi.
                                gider_siniflandirma_id.data,
                                butce_alt_limiti=butce_kalemi.butce_alt_limiti.
                                data,
                                butce_ust_limiti=butce_kalemi.butce_ust_limiti.
                                data)
                            DB.session.add(yeni_kalem)
                            DB.session.flush()
                            var_olan_butce_kalemleri.append(
                                yeni_kalem.gider_siniflandirma_id)
                for butce_kalemi in proje_turu.butce_kalemleri:
                    if butce_kalemi.gider_siniflandirma_id not in var_olan_butce_kalemleri:
                        DB.session.delete(butce_kalemi)
            elif proje_turu.butce_tercihi == ButceTercihleri.butce_ile_ilgili_islem_yapmasin.name:
                for butce_kalemi in proje_turu.butce_kalemleri:
                    DB.session.delete(butce_kalemi)

        except ZopseduModelValueError as exc:
            form_field = getattr(proje_turu_formu, exc.field_name, None)
            form_field.errors.append(str(exc))

        try:
            var_olan_ciktilar = []
            for cikti in proje_turu_formu.ciktilar:
                if cikti.cikti_id.data:
                    for kayitli_cikti in proje_turu.cikti:
                        if cikti.cikti_id.data == kayitli_cikti.id:
                            var_olan_ciktilar.append(kayitli_cikti.id)
                            kayitli_cikti.adi = cikti.adi.data
                            kayitli_cikti.cikti_sablonu_id = cikti.cikti_sablonu_id.data
                            kayitli_cikti.gorunurluk = cikti.gorunurluk.data
                            kayitli_cikti.belge_ciktisi_alinacak_mi = cikti. \
                                belge_ciktisi_alinacak_mi.data
                else:
                    cikti_obj = Cikti(proje_turu_id=proje_turu_id,
                                      adi=cikti.adi.data,
                                      sablon_id=cikti.cikti_sablonu_id.data,
                                      gorunurluk=cikti.gorunurluk.data,
                                      belge_ciktisi_alinacak_mi=cikti.
                                      belge_ciktisi_alinacak_mi.data)
                    DB.session.add(cikti_obj)
                    DB.session.flush()
                    var_olan_ciktilar.append(cikti_obj.id)

            for cikti in proje_turu.cikti:
                if cikti.id not in var_olan_ciktilar:
                    DB.session.delete(cikti)

        except ZopseduModelValueError as exc:
            form_field = getattr(proje_turu_formu, exc.field_name, None)
            form_field.errors.append(str(exc))

        try:
            var_olan_dosyalar = []
            for ek_dosya in proje_turu_formu.ek_dosyalar:
                if ek_dosya.ek_dosya_id.data:
                    for kayitli_ek_dosya in proje_turu.ek_dosyalar:
                        if ek_dosya.ek_dosya_id.data == kayitli_ek_dosya.id:
                            var_olan_dosyalar.append(kayitli_ek_dosya.id)
                            request_file = request.files.get(
                                ek_dosya.belge.file_id.name, None)
                            if request_file:
                                file = File(content=request_file,
                                            user_id=current_user.id)
                                DB.session.add(file)
                                DB.session.flush()
                                kayitli_ek_dosya.belge.file_id = file.id

                            kayitli_ek_dosya.belge.adi = ek_dosya.belge.adi.data
                            kayitli_ek_dosya.belge.aciklama = ek_dosya.belge.aciklama.data
                            kayitli_ek_dosya.zorunlu_mu = ek_dosya.zorunlu_mu.data
                            kayitli_ek_dosya.proje_icerik_dosyasi_mi = ek_dosya. \
                                proje_icerik_dosyasi_mi.data
                            kayitli_ek_dosya.belgenin_ciktisi_alinacak_mi = ek_dosya. \
                                belgenin_ciktisi_alinacak_mi.data
                else:
                    request_file = request.files.get(
                        ek_dosya.belge.file_id.name, None)
                    if request_file:
                        file = File(content=request_file,
                                    user_id=current_user.id)
                        DB.session.add(file)
                        DB.session.flush()
                        bap_belge = BAPBelge(adi=ek_dosya.belge.adi.data,
                                             file_id=file.id,
                                             aciklama=ek_dosya.belge.adi.data)
                        DB.session.add(bap_belge)
                        DB.session.flush()
                        ek_dosya_obj = EkDosya(
                            proje_turu_id=proje_turu_id,
                            dosya_id=bap_belge.id,
                            zorunlu_mu=ek_dosya.zorunlu_mu.data,
                            proje_icerik_dosyasi_mi=ek_dosya.
                            proje_icerik_dosyasi_mi.data,
                            belgenin_ciktisi_alinacak_mi=ek_dosya.
                            belgenin_ciktisi_alinacak_mi.data)
                        DB.session.add(ek_dosya_obj)
                        DB.session.flush()
                        var_olan_dosyalar.append(ek_dosya_obj.id)
            for ek_dosya in proje_turu.ek_dosyalar:
                if ek_dosya.id not in var_olan_dosyalar:
                    DB.session.delete(ek_dosya)

        except ZopseduModelValueError as exc:
            form_field = getattr(proje_turu_formu, exc.field_name, None)
            form_field.errors.append(str(exc))

        if proje_turu_formu.errors:

            DB.session.rollback()

            hata_listesi = set()
            form_errors_dict_to_set(proje_turu_formu.errors, hata_listesi)

            return render_template("proje_turu/proje_turu.html",
                                   proje_turu_formu=proje_turu_formu,
                                   proje_turu_id=proje_turu_id,
                                   guncel_mi=proje_turu.guncel_mi,
                                   basvuru_yapilmis_mi=False,
                                   hata_mesajlari=hata_listesi)
        DB.session.commit()
        signal_payload = {
            "message_type":
            USER_ACTIVITY_MESSAGES.get("bap").get(
                "proje_turu_guncelle").type_index,
            "nesne":
            'Proje Turu',
            "nesne_id":
            proje_turu.id,
            "ekstra_mesaj":
            "{} adli user, {} kategorili, {} isimli proje türünü "
            "guncelledi.".format(current_user.username, proje_turu.kategori,
                                 proje_turu.ad)
        }
        signal_sender(**signal_payload)
        flash(_("İşleminiz başarıyla gerçekleştirildi."))
        return redirect(url_for('proje.ProjeTuruView:proje_turu_listele'))
Beispiel #16
0
    def proje_sozlesmesi_yukle(proje_id):
        """
        Proje sozlemesini Yukleme
        """
        try:
            sozlesme_formu = SozlesmeYukleForm(request.form)
            if sozlesme_formu.validate():
                sozlesme_file = request.files.get(
                    sozlesme_formu.sozlesme_file.name, None)
                if sozlesme_file:
                    file = File(content=sozlesme_file, user_id=current_user.id)
                    DB.session.add(file)
                    DB.session.flush()
                    proje = DB.session.query(Proje).filter(
                        Proje.id == proje_id).first()
                    sozlesme_var_mi = True if proje.proje_sozlesme_id else False
                    proje.proje_sozlesme_id = file.id
                    DB.session.commit()
                    flash(
                        _("Proje Sözleşmesi başarılı bir şekilde yüklenmiştir."
                          ))

                    if sozlesme_var_mi:
                        user_activity_message = _(
                            "Proje Sözleşmesi Güncellendi")
                    else:
                        user_activity_message = _("Proje Sözleşmesi Yüklendi")

                    revizyon_signal_payload = {
                        "message_type":
                        USER_ACTIVITY_MESSAGES.get("bap").get(
                            "proje_sozlesmesi_yuklendi").type_index,
                        "nesne":
                        'Proje',
                        "nesne_id":
                        proje_id,
                        "ekstra_mesaj":
                        "{} adlı kullanıcı, {} numaralı projeye sözleşme yükledi"
                        .format(current_user.username, proje.proje_no)
                    }

                    signal_sender(**revizyon_signal_payload)

                    for bap_admin in bap_yetkili_and_admin_ids():
                        payload = {
                            "message_type":
                            USER_ACTIVITY_MESSAGES.get("bap").get(
                                "proje_sozlesmesi_yuklendi").type_index,
                            "ekstra_mesaj":
                            "{} id li projeye sözleşme yüklendi".format(
                                proje.id),
                            "notification_receiver":
                            bap_admin.person_id,
                            "notification_title":
                            user_activity_message,
                            "notification_message":
                            "{} numaralı projenin sözleşmesi {} adlı kullanıcı"
                            " tarafından yüklendi.".format(
                                proje.proje_no, current_user.username),
                            "proje_id":
                            proje.id
                        }

                        signal_sender(log=False, notification=True, **payload)
                else:
                    flash(_("Lütfen proje sözleşmesi yükleyiniz"))
            else:
                flash(_("Sözleşme kaydedilemedi."))
                flash(sozlesme_formu.sozlesme_file.errors[0])
        except Exception as exc:
            DB.session.rollback()
            CustomErrorHandler.error_handler(
                hata="Proje sözleşmesi yüklenirken bir hata meydana geldi"
                "Hata: {}".format(exc))
        return redirect(url_for("proje.proje_dashboard", proje_id=proje_id))