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")
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
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)
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'))
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() )
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)
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")
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' ))
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)
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))
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)
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"))
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'))
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))