def satinalma_urunler_listele(self, satinalma_id): """ Satinalma ürünlerine ulasmak icin kullanilir :param satinalma_id: satinalma_id(int) :return: http response """ try: satinalma = get_satinalma_with_related_fields(satinalma_id=satinalma_id) states_info = get_satinalma_next_states_info(satinalma_id=satinalma_id) actions_info = get_satinalma_actions_info(satinalma_id=satinalma_id) proje = DB.session.query(Proje).filter(Proje.id == satinalma.proje_id).first() talep_kalemleri_with_siparis_info = [] for talep_kalemi in satinalma.talep_kalemleri: data = { "kalem_adi": talep_kalemi.proje_kalemi.ad, "kalem_gerekce": talep_kalemi.proje_kalemi.gerekce, "birim": talep_kalemi.proje_kalemi.birim.value, "miktar": talep_kalemi.talep_miktari, "tutar": talep_kalemi.proje_kalemi.toplam_butce / talep_kalemi.proje_kalemi.toplam_miktar * talep_kalemi.talep_miktari, "teknik_sartname_id": talep_kalemi.teknik_sartname_file_id, "firma_adi": "-", "teslimat_suresi": "-", "kdv_dahil_teklif": 0, "siparis_takip_no": "-", "siparis_durumu": "-" } if talep_kalemi.siparis_takip: kdv_dahil_teklif = kdv_dahil_fiyat_hesabi(talep_kalemi.siparis_takip.kazanan_firma_teklif.teklif, talep_kalemi.siparis_takip.kazanan_firma_teklif.kdv_orani) data.update({ "firma_adi": talep_kalemi.siparis_takip.kazanan_firma_teklif.satinalma_teklif.firma.adi, "teslimat_suresi": talep_kalemi.siparis_takip.kazanan_firma_teklif.teslimat_suresi, "kdv_dahil_teklif": kdv_dahil_teklif, "siparis_takip_no": talep_kalemi.siparis_takip.siparis_numarasi, "siparis_durumu": talep_kalemi.siparis_takip.siparis_durumu.value if talep_kalemi.siparis_takip.siparis_durumu else "-" }) talep_kalemleri_with_siparis_info.append(data) except Exception as exc: CustomErrorHandler.error_handler(hata="Satinalma ürün listesi görüntülenirken hata oluştu." "Hata: {}, Satinalma id: {}".format(satinalma_id, exc) ) return abort(500) return render_template("satinalma_dashboard/satinalma_urunler.html", talep_kalemleri_with_siparis_info=talep_kalemleri_with_siparis_info, satinalma=satinalma, satinalma_id=satinalma_id, proje=proje, actions_info=actions_info, states_info=states_info)
def st7_get(satinalma_id, form=None, action_code=None): if form: modal_form = form else: modal_form = DurumFormlari.ST7() satinalma = DB.session.query(ProjeSatinAlmaTalebi).options( joinedload(ProjeSatinAlmaTalebi.talep_kalemleri).joinedload( TalepKalemleri.siparis_takip).joinedload( SiparisTakip.kazanan_firma_teklif).joinedload( FirmaTeklifKalemi.satinalma_teklif)).filter( ProjeSatinAlmaTalebi.id == satinalma_id).first() aciklama = satinalma_durum_aciklamasi(action_code) proje = proje_bilgisi(satinalma.proje_id) talep_kalemleri_with_firma_teklif = [] for talep_kalemi in satinalma.talep_kalemleri: data = { "kalem_adi": talep_kalemi.proje_kalemi.ad, "birim": talep_kalemi.proje_kalemi.birim.value, "miktar": talep_kalemi.talep_miktari, "firma_adi": "-", "marka_model": "-", "teklif": "-", "kdv_orani": "-", "teslimat_suresi": "-", "kdv_dahil_teklif": 0, "siparis_takip_no": "-" } if talep_kalemi.siparis_takip: kdv_dahil_teklif = kdv_dahil_fiyat_hesabi(talep_kalemi.siparis_takip.kazanan_firma_teklif.teklif, talep_kalemi.siparis_takip.kazanan_firma_teklif.kdv_orani) data.update({ "firma_adi": talep_kalemi.siparis_takip.kazanan_firma_teklif.satinalma_teklif.firma.adi, "marka_model": talep_kalemi.siparis_takip.kazanan_firma_teklif.marka_model, "teklif": talep_kalemi.siparis_takip.kazanan_firma_teklif.teklif, "kdv_orani": talep_kalemi.siparis_takip.kazanan_firma_teklif.kdv_orani, "teslimat_suresi": talep_kalemi.siparis_takip.kazanan_firma_teklif.teslimat_suresi, "kdv_dahil_teklif": kdv_dahil_teklif, "siparis_takip_no": talep_kalemi.siparis_takip.siparis_numarasi }) talep_kalemleri_with_firma_teklif.append(data) return render_template("satinalma_dashboard/durum_degisim_modal/st7.html", proje_numarasi=proje.proje_no, proje_adi=proje.proje_basligi, proje_id=proje.id, app_state_description=aciklama, form=modal_form, talep_kalemleri_data=talep_kalemleri_with_firma_teklif, )
def st12_get(satinalma_id, form=None, action_code=None): if form: modal_form = form else: modal_form = DurumFormlari.ST12() satinalma = satinalma_bilgisi(satinalma_id) aciklma = satinalma_durum_aciklamasi(action_code) proje = proje_bilgisi(satinalma.proje_id) talep_kalemleri_with_siparis_info = [] for talep_kalemi in satinalma.talep_kalemleri: data = { "kalem_adi": talep_kalemi.proje_kalemi.ad, "birim": talep_kalemi.proje_kalemi.birim.value, "miktar": talep_kalemi.talep_miktari, "firma_adi": "-", "teklif": "-", "kdv_orani": "-", "teslimat_suresi": "-", "kdv_dahil_teklif": 0, "siparis_takip_no": "-", "siparis_durumu": "-" } if talep_kalemi.siparis_takip: kdv_dahil_teklif = kdv_dahil_fiyat_hesabi(talep_kalemi.siparis_takip.kazanan_firma_teklif.teklif, talep_kalemi.siparis_takip.kazanan_firma_teklif.kdv_orani) data.update({ "firma_adi": talep_kalemi.siparis_takip.kazanan_firma_teklif.satinalma_teklif.firma.adi, "teklif": talep_kalemi.siparis_takip.kazanan_firma_teklif.teklif, "kdv_orani": talep_kalemi.siparis_takip.kazanan_firma_teklif.kdv_orani, "teslimat_suresi": talep_kalemi.siparis_takip.kazanan_firma_teklif.teslimat_suresi, "kdv_dahil_teklif": kdv_dahil_teklif, "siparis_takip_no": talep_kalemi.siparis_takip.siparis_numarasi, "siparis_durumu": talep_kalemi.siparis_takip.siparis_durumu.value }) talep_kalemleri_with_siparis_info.append(data) return render_template("satinalma_dashboard/durum_degisim_modal/st9.html", proje_numarasi=proje.proje_no, proje_adi=proje.proje_basligi, proje_id=proje.id, app_state_description=aciklma, talep_kalemleri_with_siparis_info=talep_kalemleri_with_siparis_info, form=modal_form )
def muhasebe_fisleri(self, satinalma_id): """ muhasebe fislerini listeleyen view methodu :param satinalma_id: ilgili satinalma id """ try: satinalma = get_satinalma_with_related_fields(satinalma_id=satinalma_id) states_info = get_satinalma_next_states_info(satinalma_id=satinalma_id) actions_info = get_satinalma_actions_info(satinalma_id=satinalma_id) proje = DB.session.query(Proje).filter(Proje.id == satinalma.proje_id).first() satinalma_talep_kalemleri_ids = [talep_kalemi.id for talep_kalemi in satinalma.talep_kalemleri] satinalma_muhasebe_fisleri = DB.session.query(MuhasebeFisi).filter( MuhasebeFisi.satinalma_talep_id == satinalma_id ).all() satinalma_siparisleri = DB.session.query(SiparisTakip).options( joinedload(SiparisTakip.satinalma_talep_kalemleri), joinedload(SiparisTakip.kazanan_firma_teklif).joinedload( FirmaTeklifKalemi.satinalma_teklif).joinedload( FirmaSatinalmaTeklif.firma) ).filter( SiparisTakip.satinalma_talep_kalemleri_id.in_(satinalma_talep_kalemleri_ids), SiparisTakip.siparis_durumu == SiparisDurumu.fatura_teslim_alindi ).all() siparis_data = [] for siparis in satinalma_siparisleri: kdv_dahil_fiyat = kdv_dahil_fiyat_hesabi(siparis.kazanan_firma_teklif.teklif, siparis.kazanan_firma_teklif.kdv_orani) if not siparis.satinalma_talep_kalemleri.muhasebe_fis_id: siparis_data.append({ "siparis_id": siparis.id, "proje_kalemi": siparis.satinalma_talep_kalemleri.proje_kalemi.ad, "miktar": siparis.satinalma_talep_kalemleri.talep_miktari, "birim": siparis.satinalma_talep_kalemleri.proje_kalemi.birim.value, "kdv_dahil_tutar": kdv_dahil_fiyat, "tutar": siparis.kazanan_firma_teklif.teklif, "siparis_numarasi": siparis.siparis_numarasi, "firma_adi": siparis.kazanan_firma_teklif.satinalma_teklif.firma.adi, "kabul_tarihi": siparis.kabul_tarihi }) muhasebe_information_form = MuhasebeFisiListelemeInformation() 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_fisleri.html", muhasebe_information_form=muhasebe_information_form, muhesabe_fisleri=satinalma_muhasebe_fisleri, satinalma_siparisleri=siparis_data, satinalma=satinalma, satinalma_id=satinalma_id, proje=proje, actions_info=actions_info, states_info=states_info)
def muhasebe_fisi_olustur_post(self, satinalma_id, siparis_id): """ Muhasebe fisi olusturma kaydeden view methodu :param satinalma_id: ilgili satinalma id :param siparis_id: muhasebe fisinin kesilecegi siparis id """ # todo: kasa bilgileri gosterilecek! try: universite_id = SessionHandler.universite_id() satinalma = get_satinalma_with_related_fields(satinalma_id=satinalma_id) proje = self.get_proje_for_muhasebe_fisi(satinalma.proje_id) proje_bilgiler_data = self.get_proje_bilgileri(proje) genel_ayarlar = DB.session.query(GenelAyarlar).filter_by(universite_id=universite_id, aktif_mi=True).first() fonksiyonel_kod_choices = self.get_fonksiyonel_kod_choices( genel_ayarlar.bap_butce.get("fonksiyonel_kodlar", None) ) siparis = self.get_siparis_with_firma_and_talep_kalemleri(siparis_id) kdv_dahil_tutar = kdv_dahil_fiyat_hesabi(siparis.kazanan_firma_teklif.teklif, siparis.kazanan_firma_teklif.kdv_orani) proje_kalemi = siparis.satinalma_talep_kalemleri.proje_kalemi proje_kalemi_data = self.get_proje_kalemi_data(proje_kalemi, kdv_dahil_tutar) muhasebe_fis_formu = MuhasebeFisiForm(request.form) for fis_maddesi in muhasebe_fis_formu.fis_maddeleri: fis_maddesi.fonksiyonel_kod.choices = fonksiyonel_kod_choices if not muhasebe_fis_formu.validate(): return render_template("satinalma_dashboard/muhasebe_fisi_olustur.html", muhasebe_fis_formu=muhasebe_fis_formu, proje_bilgileri=proje_bilgiler_data, proje_kalemi_data=proje_kalemi_data, satinalma=satinalma, satinalma_id=satinalma_id, siparis_id=siparis_id) # belge numarasinin daha once atanmis olma durumu kontrol edilir belge_numarasi_exist = DB.session.query(exists().where( MuhasebeFisi.muhasebe_fis_no == muhasebe_fis_formu.fis_genel_bilgileri.belge_numarasi.data)).scalar() if belge_numarasi_exist: oneri_belge_numarasi = "{}{}".format(date.today().year, siparis_id) hata_mesaji = "Muhasebe fişi belge numarası kullanılmaktadır. (Öneri belge " \ "numarası {})".format(oneri_belge_numarasi) muhasebe_fis_formu.fis_genel_bilgileri.belge_numarasi.errors.append(hata_mesaji) return render_template("satinalma_dashboard/muhasebe_fisi_olustur.html", muhasebe_fis_formu=muhasebe_fis_formu, proje_bilgileri=proje_bilgiler_data, proje_kalemi_data=proje_kalemi_data, satinalma=satinalma, satinalma_id=satinalma_id, siparis_id=siparis_id) proje_kalemi = siparis.satinalma_talep_kalemleri.proje_kalemi talep_edilen_miktar = siparis.satinalma_talep_kalemleri.talep_miktari # firma teklifi kabul edildigi zaman firmanin teklifinin kdv dahil tutari rezerv # butce olarak proje kalemine eklenmisti. Muhasebe fisi olusturuldugu anda rezerv # edilen para kullanilan paraya aktarilir proje_kalemi.rezerv_butce = proje_kalemi.rezerv_butce - kdv_dahil_tutar proje_kalemi.kullanilan_butce = proje_kalemi.kullanilan_butce + kdv_dahil_tutar # proje yurutucusu satinalma talebi yaptigi anda talep edilen miktar rezerv edilmisti # Muhasebe fisi olusturuldugu anda rezerv miktar kullanilan miktara aktarilir proje_kalemi.rezerv_edilen_miktar = proje_kalemi.rezerv_edilen_miktar - talep_edilen_miktar proje_kalemi.kullanilan_miktar = proje_kalemi.kullanilan_miktar + talep_edilen_miktar proje_bilgileri_data = self.get_proje_bilgileri(proje) yeni_muhasebe_fisi = self.muhasebe_fisi_kaydet( muhasebe_fis_formu, proje_bilgileri_data["proje_no"], proje_bilgileri_data["proje_yurutucu_ad_soyad"], satinalma_id=satinalma_id, fis_tutari=kdv_dahil_tutar ) DB.session.add(yeni_muhasebe_fisi) DB.session.flush() self.muhasebe_fis_maddesi_kaydet(muhasebe_fis_formu.fis_maddeleri, yeni_muhasebe_fisi.id) siparis.satinalma_talep_kalemleri.muhasebe_fis_id = yeni_muhasebe_fisi.id siparis.siparis_durumu = SiparisDurumu.siparis_tamamlandi projenin_bagli_oldugu_kasa = proje.gelir_kasasi projenin_bagli_oldugu_kasa.rezerv_para -= kdv_dahil_tutar projenin_bagli_oldugu_kasa.harcanan_para += kdv_dahil_tutar signal_payload = { "message_type": USER_ACTIVITY_MESSAGES.get("bap").get("muhasebe_fisi_olusturuldu").type_index, "nesne": 'Proje', "nesne_id": proje.id, "ekstra_mesaj": "{} isimli kullanıcı {} id'li projenin {} id'li proje kaleminde " "yapilan satınalma sonucu {} id 'li {} TL tutarında muhasebe fişi " "oluşturdu".format( current_user.username, proje.id, proje_kalemi.id, yeni_muhasebe_fisi.id, kdv_dahil_tutar ) } signal_sender(**signal_payload) DB.session.commit() flash(_("Muhasebe fişi başarıyla oluşturulmuştur."), category="success") return redirect(url_for("satinalma.SatinalmaMuhasebeFisleri:muhasebe_fisleri", satinalma_id=satinalma_id)) except Exception as exc: DB.session.rollback() CustomErrorHandler.error_handler(hata="Satinalma muhasebe fişi listesi görüntülenirken " "hata oluştu.Hata: {}, Satinalma id: {}".format( satinalma_id, exc) ) return abort(500)
def muhasebe_fisi_olustur_get(self, satinalma_id, siparis_id): """ Muhasebe fisi olusturma ekrani :param satinalma_id: ilgili satinalma id :param firma_id: muhasebe fisinin kesilecegi firma id """ try: universite_id = SessionHandler.universite_id() satinalma = get_satinalma_with_related_fields(satinalma_id=satinalma_id) proje = self.get_proje_for_muhasebe_fisi(satinalma.proje_id) siparis = self.get_siparis_with_firma_and_talep_kalemleri(siparis_id) if not siparis: flash(_("Böyle bir sipariş bulunamadı"), category="error") return redirect(url_for("satinalma.SatinalmaMuhasebeFisleri:muhasebe_fisleri", satinalma_id=satinalma_id)) if siparis.satinalma_talep_kalemleri.muhasebe_fis_id: flash(_("Bu sipariş için daha önce muhasebe fişi oluşturdunuz."), category="error") return redirect(url_for("satinalma.SatinalmaMuhasebeFisleri:muhasebe_fisleri", satinalma_id=satinalma_id)) proje_bilgiler_data = self.get_proje_bilgileri(proje) genel_ayarlar = DB.session.query(GenelAyarlar).filter_by(universite_id=universite_id, aktif_mi=True).first() firma_bilgileri = siparis.kazanan_firma_teklif.satinalma_teklif.firma kisi_bilgileri = self.get_kisi_bilgiler(firma_bilgileri) kdv_dahil_alacak = kdv_dahil_fiyat_hesabi(siparis.kazanan_firma_teklif.teklif, siparis.kazanan_firma_teklif.kdv_orani) proje_kalemi = siparis.satinalma_talep_kalemleri.proje_kalemi proje_kalemi_data = self.get_proje_kalemi_data(proje_kalemi, kdv_dahil_alacak) fatura_bilgisi_data = self.get_fatura_bilgileri(siparis) muhasebe_fis_formu = self.init_muhasebe_fisi_form(genel_ayarlar, kisi_bilgileri, kdv_dahil_alacak, proje, fatura_bilgisi_data) # simdiki yil ve siparis id birlesiminden belge numarasi uretir belge_numarasi = "{}{}".format(date.today().year, siparis.id) muhasebe_fis_formu.fis_genel_bilgileri.belge_numarasi.data = belge_numarasi except Exception as exc: CustomErrorHandler.error_handler(hata="Satinalma muhasebe fişi listesi görüntülenirken " "hata oluştu.Hata: {}, Satinalma id: {}".format( satinalma_id, exc) ) return abort(500) return render_template("satinalma_dashboard/muhasebe_fisi_olustur.html", muhasebe_fis_formu=muhasebe_fis_formu, proje_bilgileri=proje_bilgiler_data, proje_kalemi_data=proje_kalemi_data, satinalma=satinalma, satinalma_id=satinalma_id, siparis_id=siparis_id)
def satinalma_firma_teklifleri_listele(self, satinalma_id): """ Satinalmaya yapilmis firma tekliflerine ulasmak icin kullanilir :param satinalma_id: satinalma_id(int) :return: http response """ try: satinalma = DB.session.query(ProjeSatinAlmaTalebi).options( joinedload(ProjeSatinAlmaTalebi.proje), joinedload(ProjeSatinAlmaTalebi.talep_kalemleri).joinedload( TalepKalemleri.firma_teklif_kalemleri)).filter( ProjeSatinAlmaTalebi.id == satinalma_id).first() states_info = get_satinalma_next_states_info( satinalma_id=satinalma_id) actions_info = get_satinalma_actions_info( satinalma_id=satinalma_id) proje = DB.session.query(Proje).filter( Proje.id == satinalma.proje_id).first() firma_teklifleri = DB.session.query(FirmaSatinalmaTeklif).options( joinedload(FirmaSatinalmaTeklif.firma), joinedload(FirmaSatinalmaTeklif.teklif_kalemleri).joinedload( FirmaTeklifKalemi.satinalma_talep_kalemi)).filter( FirmaSatinalmaTeklif.satinalma_id == satinalma_id, FirmaSatinalmaTeklif.teklif_tamamlandi_mi == True).all() satinalma_talep_kalemleri_ids = [ talep_kalemi.id for talep_kalemi in satinalma.talep_kalemleri ] # teklifi kabul edilen firmalari bulunur. siparis_takipleri = DB.session.query(SiparisTakip).options( joinedload(SiparisTakip.satinalma_talep_kalemleri), joinedload(SiparisTakip.kazanan_firma_teklif).joinedload( FirmaTeklifKalemi.satinalma_teklif).joinedload( FirmaSatinalmaTeklif.firma).lazyload("*")).filter( SiparisTakip.satinalma_talep_kalemleri_id.in_( satinalma_talep_kalemleri_ids)).all() teklif_kabul_edilen_talepler = set() siparis_takip_data = [] # kabul edilen firma tekliflerini(siparis takipleri) listeler for siparis_takip in siparis_takipleri: kazanan_firma = siparis_takip.kazanan_firma_teklif kdv_dahil_teklif = kdv_dahil_fiyat_hesabi( kazanan_firma.teklif, kazanan_firma.kdv_orani) siparis_takip_data.append({ "siparis_takip_id": siparis_takip.id, "kalem_adi": siparis_takip.satinalma_talep_kalemleri.proje_kalemi.ad, "kalem_aciklama": siparis_takip.satinalma_talep_kalemleri.proje_kalemi. gerekce, "birim": siparis_takip.satinalma_talep_kalemleri.proje_kalemi.birim. value, "miktar": siparis_takip.satinalma_talep_kalemleri.talep_miktari, "firma_adi": siparis_takip.kazanan_firma_teklif.satinalma_teklif.firma. adi, "marka_model": siparis_takip.kazanan_firma_teklif.marka_model, "teklif": siparis_takip.kazanan_firma_teklif.teklif, "kdv_orani": siparis_takip.kazanan_firma_teklif.kdv_orani, "teslimat_suresi": siparis_takip.kazanan_firma_teklif.teslimat_suresi, "kdv_dahil_teklif": kdv_dahil_teklif, "siparis_durumu": siparis_takip.siparis_durumu.value if siparis_takip.siparis_durumu else "-" }) teklif_kabul_edilen_talepler.add( siparis_takip.satinalma_talep_kalemleri_id) # firmalarin satinalma talep kalemlerine yaptigi teklif kalemleri datasi olusturulur # (kazanan firmasi belirlernmis yani siparis takibi olusturulmus talep kalemleri haric) firma_teklif_data = [] firma_dosyalari_data = [] for firma_teklif in firma_teklifleri: for teklif_kalemi in firma_teklif.teklif_kalemleri: if teklif_kalemi.satinalma_talep_kalemi.id not in teklif_kabul_edilen_talepler: kdv_dahil_teklif = kdv_dahil_fiyat_hesabi( teklif_kalemi.teklif, teklif_kalemi.kdv_orani) firma_teklif_data.append({ "satinalma_talep_kalem_id": teklif_kalemi.satinalma_talep_kalemi.id, "firma_teklif_kalemi_id": teklif_kalemi.id, "firma_id": firma_teklif.firma.id, "kalem_adi": teklif_kalemi.satinalma_talep_kalemi.proje_kalemi. ad, "kalem_aciklama": teklif_kalemi.satinalma_talep_kalemi.proje_kalemi. gerekce, "birim": teklif_kalemi.satinalma_talep_kalemi.proje_kalemi. birim.value, "miktar": teklif_kalemi.satinalma_talep_kalemi.talep_miktari, "firma_adi": firma_teklif.firma.adi, "marka_model": teklif_kalemi.marka_model, "teklif": teklif_kalemi.teklif, "kdv_orani": teklif_kalemi.kdv_orani, "teslimat_suresi": teklif_kalemi.teslimat_suresi, "kdv_dahil_teklif": kdv_dahil_teklif, "teknik_sartname_uygunlugu": teklif_kalemi.teknik_sartname_uygunlugu }) for teklif_dosya in firma_teklif.teklif_dosyalari: firma_dosyalari_data.append({ "firma_teklif_dosya_id": firma_teklif.id, "firma_adi": firma_teklif.firma.adi, "file_id": teklif_dosya.file_id, "aciklama": teklif_dosya.aciklama, "dosya_kategorisi": teklif_dosya.dosya_kategori.value }) information_form = FirmalarBolumuInformation() except Exception as exc: DB.session.rollback() CustomErrorHandler.error_handler( hata="Satinalma firma teklifleri görüntülenirken hata " "oluştu.Hata: {}, Satinalma id: {}".format(satinalma_id, exc)) return abort(500) return render_template("satinalma_dashboard/satinalma_firmalar.html", firma_teklifleri=firma_teklif_data, firma_teklif_dosyalari=firma_dosyalari_data, siparis_takip_data=siparis_takip_data, information_form=information_form, satinalma=satinalma, satinalma_id=satinalma_id, proje=proje, actions_info=actions_info, states_info=states_info)
def firma_teklif_sil(self, satinalma_id, siparis_takip_id): try: # sadece st6 durumunda bu işlemin yapilmasini saglanir satinalma = DB.session.query(ProjeSatinAlmaTalebi).options( joinedload(ProjeSatinAlmaTalebi.durumu), lazyload("*")).filter( ProjeSatinAlmaTalebi.id == satinalma_id).first() if not satinalma.durumu.id == 39: return jsonify( status="error", error_message="Sadece \"{}\" durumunda bu işlemi " "gerçekleştirebilirsin".format( satinalma.durumu.description)), 405 siparis_takip = DB.session.query(SiparisTakip).filter( SiparisTakip.id == siparis_takip_id).options( joinedload(SiparisTakip.kazanan_firma_teklif), joinedload(SiparisTakip.satinalma_talep_kalemleri), ).first() if not siparis_takip: return jsonify(status="error", error_message="İlgili siparis bulunamadı"), 404 # proje kaleminin rezerv butcesi firmanin kdv dahil teklifi kadar azaltilir firma_teklif = siparis_takip.kazanan_firma_teklif proje_kalemi = siparis_takip.satinalma_talep_kalemleri.proje_kalemi kdv_dahil_teklif = kdv_dahil_fiyat_hesabi(firma_teklif.teklif, firma_teklif.kdv_orani) proje_kalemi.rezerv_butce = proje_kalemi.rezerv_butce - kdv_dahil_teklif DB.session.delete(siparis_takip) state_tracker = AppStateTracker( state_id=satinalma.durum_id, triggered_by=current_user.id, params={ "proje_id": satinalma.proje_id, "satinalma_id": satinalma.id }, date=datetime.now(), description="Kabul edilen firma teklifi iptal edildi", job_type=JobTypes.satinalma_action) DB.session.add(state_tracker) DB.session.commit() ekstra_mesaj = "{} id li talep kalemi için kabul edilen {} id li firma teklif kalemi " \ "iptal edildi.".format(siparis_takip.satinalma_talep_kalemleri_id, siparis_takip.kazanan_firma_teklif_id) signal_payload = { "message_type": USER_ACTIVITY_MESSAGES.get("bap").get( "kabul_edilen_firma_teklifi_silindi").type_index, "nesne": "SiparisTakip", "ekstra_mesaj": ekstra_mesaj } signal_sender(**signal_payload) return jsonify(status="success") except Exception as exc: DB.session.rollback() CustomErrorHandler.error_handler( hata= "Kabul edilen firma teklifi iptal edilirken beklenmedik bir hata oluştu." "Hata: {}, Satinalma id: {}".format(satinalma_id, exc)) return jsonify(status="error"), 500
def firma_teklif_kabul_et(self, satinalma_id, talep_kalemi_id, firma_teklif_kalemi_id): try: # sadece st6 durumunda bu işlemin yapilmasini saglanir satinalma = DB.session.query(ProjeSatinAlmaTalebi).options( joinedload(ProjeSatinAlmaTalebi.durumu), lazyload("*")).filter( ProjeSatinAlmaTalebi.id == satinalma_id).first() if not satinalma.durumu.id == 39: return jsonify( status="error", error_message="Sadece \"{}\" durumunda bu işlemi " "gerçekleştirebilirsin".format( satinalma.durumu.description)), 405 # ilgili talep kalemi icin daha önce bir teklifi kabul etmis ise gerekli hata # mesaji donulur siparis_takip = DB.session.query(SiparisTakip).filter( SiparisTakip.kazanan_firma_teklif_id == firma_teklif_kalemi_id, SiparisTakip.satinalma_talep_kalemleri_id == talep_kalemi_id).first() if siparis_takip: return jsonify( status="error", error_message="İlgili talep kalemi için kabul edilmis " "bir teklif mevcut. Başka bir teklif kabul etmek " "için daha önce kabul ettiğiniz teklifi iptal ediniz"), 409 firma_teklif_kalemi = DB.session.query(FirmaTeklifKalemi).filter( FirmaTeklifKalemi.id == firma_teklif_kalemi_id, FirmaTeklifKalemi.satinalma_talep_kalemi_id == talep_kalemi_id).first() if not firma_teklif_kalemi: return jsonify( status="error", error_message="Böyle bir teklif bulunamadı"), 404 # siparis numarasi proje numarasi, firma_teklif_kalemi_id ve talep_kalemi_id nin # birlesiminden olusur siparis_numarasi = "{}{}{}".format(satinalma.proje_id, firma_teklif_kalemi_id, talep_kalemi_id) yeni_siparis_takip = SiparisTakip( satinalma_talep_kalemleri_id=talep_kalemi_id, kazanan_firma_teklif_id=firma_teklif_kalemi_id, siparis_numarasi=siparis_numarasi) DB.session.add(yeni_siparis_takip) talep_kalemi = DB.session.query(TalepKalemleri).filter( TalepKalemleri.id == talep_kalemi_id).first() # proje kaleminde bulunan rezerv butce kdv dahil firma teklifi kadar artirilir proje_kalemi = talep_kalemi.proje_kalemi kullanilabilir_butce = proje_kalemi_kullanilabilir_butce_hesapla( proje_kalemi) teklif_kdv_dahil_tutari = kdv_dahil_fiyat_hesabi( firma_teklif_kalemi.teklif, firma_teklif_kalemi.kdv_orani) if not (kullanilabilir_butce >= teklif_kdv_dahil_tutari): # eger yeterli kullanilabilir butce yoksa kullanıcıya hata donulur return jsonify( status="error", error_message= "Proje kaleminin yeterli kullanılabilir bütçesi bulunmamakta. " "Proje kaleminin kullanılabilir bütcesi {}, firmanın kdv dahil " "teklif tutarı {}".format(kullanilabilir_butce, teklif_kdv_dahil_tutari)), 404 proje_kalemi.rezerv_butce = proje_kalemi.rezerv_butce + teklif_kdv_dahil_tutari state_tracker = AppStateTracker( state_id=satinalma.durum_id, triggered_by=current_user.id, params={ "proje_id": satinalma.proje_id, "satinalma_id": satinalma.id }, date=datetime.now(), description="Firma teklifi kabul edildi", job_type=JobTypes.satinalma_action) DB.session.add(state_tracker) DB.session.commit() ekstra_mesaj = "{} id li talep kalemi için {} id li firma teklifi kabul edildi. {} id " \ "li siparis takip kaydı oluşturuldu".format(talep_kalemi_id, firma_teklif_kalemi_id, yeni_siparis_takip.id) signal_payload = { "message_type": USER_ACTIVITY_MESSAGES.get("bap").get( "firma_teklifi_kabul_edildi").type_index, "nesne": "SiparisTakip", "nesne_id": yeni_siparis_takip.id, "ekstra_mesaj": ekstra_mesaj } signal_sender(**signal_payload) return jsonify(status="success") except Exception as exc: DB.session.rollback() CustomErrorHandler.error_handler( hata="Firma teklifi kabul edilirken beklenmedik bir hata oluştu." "Hata: {}, Satinalma id: {}, Firma Teklif Kalemi Id: {}". format(satinalma_id, exc, firma_teklif_kalemi_id)) return jsonify(status="error"), 500