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 satinalma_ozet(satinalma_id): 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() templates = get_templates_info(satinalma_id=satinalma_id) return render_template("satinalma_dashboard/satinalma_belgeler.html", satinalma=satinalma, satinalma_id=satinalma_id, proje=proje, actions_info=actions_info, states_info=states_info, templates=templates)
def satinalma_islem_gecmisi(self, satinalma_id): """ Satinalma islem gecmisine ulasmak icin kullanilir :param satinalma_id: satinalma_id(int) :return: http response """ params = {"satinalma_id": 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() islem_listesi = DB.session.query(AppStateTracker). \ filter(AppStateTracker.params.contains(params), or_(AppStateTracker.job_type == JobTypes.satinalma_state_change, AppStateTracker.job_type == JobTypes.satinalma_action)). \ join(Person, Person.user_id == AppStateTracker.triggered_by). \ join(AppState, AppStateTracker.state_id == AppState.id). \ add_columns( AppState.state_code.label("state_code"), Person.ad.label("person_ad"), Person.soyad.label("person_soyad"), ).all() except Exception as exc: CustomErrorHandler.error_handler( hata="Satinalma işlem geçmişi görüntülenirken hata oluştu." "Hata: {}, Satinalma id: {}".format(satinalma_id, exc) ) return abort(500) return render_template("satinalma_dashboard/satinalma_yapilan_islemler.html", islem_listesi=islem_listesi, satinalma=satinalma, satinalma_id=satinalma_id, proje=proje, actions_info=actions_info, states_info=states_info)
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_ozet(satinalma_id): """ Satınalma özeti bilgilerine ulaşmak için kullanılır Args: satinalma_id(int): satinalma id si Returns: """ try: satinalma = get_satinalma_with_related_fields(satinalma_id=satinalma_id) satinalma_dispatcher = SatinalmaStateDispatcher(state_type=StateTypes.satinalma, action_type=ActionTypes.satinalma, entity_type=ProjeSatinAlmaTalebi, entity=satinalma) satinalma_durum = satinalma_dispatcher.current_state_info() possible_next_states = satinalma_dispatcher.possible_next_states_info() possible_actions = satinalma_dispatcher.possible_actions() proje = DB.session.query(Proje).options( joinedload(Proje.proje_kalemleri).lazyload("*")).filter( Proje.id == satinalma.proje_id).first() actions_info = DB.session.query(AppAction).filter( AppAction.action_code.in_(possible_actions.possible_actions)).all() states_info = DB.session.query(AppState). \ filter(AppState.state_code.in_(possible_next_states.possible_states)).all() toplam_butce = Decimal("0.00") rezerv_butce = Decimal("0.00") kullanilan_butce = Decimal("0.00") for proje_kalemi in proje.proje_kalemleri: toplam_butce += proje_kalemi.toplam_butce rezerv_butce += proje_kalemi.rezerv_butce kullanilan_butce += proje_kalemi.kullanilan_butce kullanilabilir_butce = toplam_butce - rezerv_butce - kullanilan_butce kullanilabilir_butce = kullanilabilir_butce.quantize(Decimal(".01")) satinalma_durumlari = DB.session.query( AppState.state_code.label("state_code"), AppState.description.label("state_description"), AppState.current_app_state.label("current_app_state"), ).filter( AppState.state_type == StateTypes.satinalma ).options(lazyload("*")).order_by(AppState.id).all() satinalma_islemleri = DB.session.query( AppAction.action_code.label("action_code"), AppAction.description.label("action_description"), ).filter( AppAction.action_type == ActionTypes.satinalma ).order_by( AppAction.id ).all() except SQLAlchemyError as exc: CustomErrorHandler.error_handler(hata="Satınalma dashboard ekranı yüklenirken database sorgularında sorun oluştu " "Hata: {}, User id: {}, Satınalma id: {}".format( exc, current_user.id, satinalma_id)) return abort(500) return render_template("satinalma_dashboard/satinalma_ozeti.html", satinalma=satinalma, satinalma_id=satinalma_id, actions_info=actions_info, states_info=states_info, satinalma_durum=satinalma_durum, proje=proje, kullanilabilir_butce=kullanilabilir_butce, kullanilan_butce=kullanilan_butce, rezerv_butce=rezerv_butce, toplam_butce=toplam_butce, satinalma_islemleri=satinalma_islemleri, satinalma_durumlari=satinalma_durumlari)