コード例 #1
0
ファイル: satinalma_urunler.py プロジェクト: kunthar/zopsedu
    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)
コード例 #2
0
ファイル: satinalma_belgeler.py プロジェクト: kunthar/zopsedu
    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)
コード例 #3
0
    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)
コード例 #4
0
    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)
コード例 #5
0
    def muhasebe_fisi_olustur_post(self, satinalma_id, siparis_id):
        """
        Muhasebe fisi olusturma kaydeden view methodu
        :param satinalma_id: ilgili satinalma id
        :param siparis_id: muhasebe fisinin kesilecegi siparis id
        """

        # todo: kasa bilgileri gosterilecek!
        try:
            universite_id = SessionHandler.universite_id()
            satinalma = get_satinalma_with_related_fields(satinalma_id=satinalma_id)
            proje = self.get_proje_for_muhasebe_fisi(satinalma.proje_id)

            proje_bilgiler_data = self.get_proje_bilgileri(proje)

            genel_ayarlar = DB.session.query(GenelAyarlar).filter_by(universite_id=universite_id,
                                                                     aktif_mi=True).first()
            fonksiyonel_kod_choices = self.get_fonksiyonel_kod_choices(
                genel_ayarlar.bap_butce.get("fonksiyonel_kodlar", None)
            )

            siparis = self.get_siparis_with_firma_and_talep_kalemleri(siparis_id)
            kdv_dahil_tutar = kdv_dahil_fiyat_hesabi(siparis.kazanan_firma_teklif.teklif,
                                                     siparis.kazanan_firma_teklif.kdv_orani)
            proje_kalemi = siparis.satinalma_talep_kalemleri.proje_kalemi
            proje_kalemi_data = self.get_proje_kalemi_data(proje_kalemi, kdv_dahil_tutar)

            muhasebe_fis_formu = MuhasebeFisiForm(request.form)
            for fis_maddesi in muhasebe_fis_formu.fis_maddeleri:
                fis_maddesi.fonksiyonel_kod.choices = fonksiyonel_kod_choices

            if not muhasebe_fis_formu.validate():
                return render_template("satinalma_dashboard/muhasebe_fisi_olustur.html",
                                       muhasebe_fis_formu=muhasebe_fis_formu,
                                       proje_bilgileri=proje_bilgiler_data,
                                       proje_kalemi_data=proje_kalemi_data,
                                       satinalma=satinalma,
                                       satinalma_id=satinalma_id,
                                       siparis_id=siparis_id)

            # belge numarasinin daha once atanmis olma durumu kontrol edilir
            belge_numarasi_exist = DB.session.query(exists().where(
                MuhasebeFisi.muhasebe_fis_no == muhasebe_fis_formu.fis_genel_bilgileri.belge_numarasi.data)).scalar()

            if belge_numarasi_exist:
                oneri_belge_numarasi = "{}{}".format(date.today().year, siparis_id)
                hata_mesaji = "Muhasebe fişi belge numarası kullanılmaktadır. (Öneri belge " \
                              "numarası {})".format(oneri_belge_numarasi)
                muhasebe_fis_formu.fis_genel_bilgileri.belge_numarasi.errors.append(hata_mesaji)
                return render_template("satinalma_dashboard/muhasebe_fisi_olustur.html",
                                       muhasebe_fis_formu=muhasebe_fis_formu,
                                       proje_bilgileri=proje_bilgiler_data,
                                       proje_kalemi_data=proje_kalemi_data,
                                       satinalma=satinalma,
                                       satinalma_id=satinalma_id,
                                       siparis_id=siparis_id)

            proje_kalemi = siparis.satinalma_talep_kalemleri.proje_kalemi
            talep_edilen_miktar = siparis.satinalma_talep_kalemleri.talep_miktari
            # firma teklifi kabul edildigi zaman firmanin teklifinin kdv dahil tutari rezerv
            # butce olarak proje kalemine eklenmisti. Muhasebe fisi olusturuldugu anda rezerv
            # edilen para kullanilan paraya aktarilir
            proje_kalemi.rezerv_butce = proje_kalemi.rezerv_butce - kdv_dahil_tutar
            proje_kalemi.kullanilan_butce = proje_kalemi.kullanilan_butce + kdv_dahil_tutar
            # proje yurutucusu satinalma talebi yaptigi anda talep edilen miktar rezerv edilmisti
            # Muhasebe fisi olusturuldugu anda rezerv miktar kullanilan miktara aktarilir
            proje_kalemi.rezerv_edilen_miktar = proje_kalemi.rezerv_edilen_miktar - talep_edilen_miktar
            proje_kalemi.kullanilan_miktar = proje_kalemi.kullanilan_miktar + talep_edilen_miktar

            proje_bilgileri_data = self.get_proje_bilgileri(proje)
            yeni_muhasebe_fisi = self.muhasebe_fisi_kaydet(
                muhasebe_fis_formu,
                proje_bilgileri_data["proje_no"],
                proje_bilgileri_data["proje_yurutucu_ad_soyad"],
                satinalma_id=satinalma_id,
                fis_tutari=kdv_dahil_tutar
            )
            DB.session.add(yeni_muhasebe_fisi)
            DB.session.flush()
            self.muhasebe_fis_maddesi_kaydet(muhasebe_fis_formu.fis_maddeleri,
                                             yeni_muhasebe_fisi.id)

            siparis.satinalma_talep_kalemleri.muhasebe_fis_id = yeni_muhasebe_fisi.id
            siparis.siparis_durumu = SiparisDurumu.siparis_tamamlandi

            projenin_bagli_oldugu_kasa = proje.gelir_kasasi
            projenin_bagli_oldugu_kasa.rezerv_para -= kdv_dahil_tutar
            projenin_bagli_oldugu_kasa.harcanan_para += kdv_dahil_tutar

            signal_payload = {
                "message_type": USER_ACTIVITY_MESSAGES.get("bap").get("muhasebe_fisi_olusturuldu").type_index,
                "nesne": 'Proje',
                "nesne_id": proje.id,
                "ekstra_mesaj": "{} isimli kullanıcı {} id'li projenin {} id'li proje kaleminde "
                                "yapilan satınalma sonucu {} id 'li {} TL tutarında muhasebe fişi "
                                "oluşturdu".format(
                    current_user.username,
                    proje.id,
                    proje_kalemi.id,
                    yeni_muhasebe_fisi.id,
                    kdv_dahil_tutar
                )
            }
            signal_sender(**signal_payload)

            DB.session.commit()

            flash(_("Muhasebe fişi başarıyla oluşturulmuştur."), category="success")
            return redirect(url_for("satinalma.SatinalmaMuhasebeFisleri:muhasebe_fisleri",
                                    satinalma_id=satinalma_id))

        except Exception as exc:
            DB.session.rollback()
            CustomErrorHandler.error_handler(hata="Satinalma muhasebe fişi listesi görüntülenirken "
                                                  "hata oluştu.Hata: {}, Satinalma id: {}".format(
                                                 satinalma_id,
                                                 exc)
                                             )
            return abort(500)
コード例 #6
0
    def muhasebe_fisi_olustur_get(self, satinalma_id, siparis_id):
        """
        Muhasebe fisi olusturma ekrani
        :param satinalma_id: ilgili satinalma id
        :param firma_id: muhasebe fisinin kesilecegi firma id
        """

        try:
            universite_id = SessionHandler.universite_id()
            satinalma = get_satinalma_with_related_fields(satinalma_id=satinalma_id)
            proje = self.get_proje_for_muhasebe_fisi(satinalma.proje_id)

            siparis = self.get_siparis_with_firma_and_talep_kalemleri(siparis_id)
            if not siparis:
                flash(_("Böyle bir sipariş bulunamadı"), category="error")
                return redirect(url_for("satinalma.SatinalmaMuhasebeFisleri:muhasebe_fisleri",
                                        satinalma_id=satinalma_id))

            if siparis.satinalma_talep_kalemleri.muhasebe_fis_id:
                flash(_("Bu sipariş için daha önce muhasebe fişi oluşturdunuz."), category="error")
                return redirect(url_for("satinalma.SatinalmaMuhasebeFisleri:muhasebe_fisleri",
                                        satinalma_id=satinalma_id))

            proje_bilgiler_data = self.get_proje_bilgileri(proje)

            genel_ayarlar = DB.session.query(GenelAyarlar).filter_by(universite_id=universite_id,
                                                                     aktif_mi=True).first()

            firma_bilgileri = siparis.kazanan_firma_teklif.satinalma_teklif.firma
            kisi_bilgileri = self.get_kisi_bilgiler(firma_bilgileri)
            kdv_dahil_alacak = kdv_dahil_fiyat_hesabi(siparis.kazanan_firma_teklif.teklif,
                                                      siparis.kazanan_firma_teklif.kdv_orani)

            proje_kalemi = siparis.satinalma_talep_kalemleri.proje_kalemi
            proje_kalemi_data = self.get_proje_kalemi_data(proje_kalemi, kdv_dahil_alacak)
            fatura_bilgisi_data = self.get_fatura_bilgileri(siparis)

            muhasebe_fis_formu = self.init_muhasebe_fisi_form(genel_ayarlar,
                                                              kisi_bilgileri,
                                                              kdv_dahil_alacak,
                                                              proje,
                                                              fatura_bilgisi_data)
            # simdiki yil ve siparis id birlesiminden belge numarasi uretir
            belge_numarasi = "{}{}".format(date.today().year, siparis.id)
            muhasebe_fis_formu.fis_genel_bilgileri.belge_numarasi.data = belge_numarasi

        except Exception as exc:
            CustomErrorHandler.error_handler(hata="Satinalma muhasebe fişi listesi görüntülenirken "
                                                  "hata oluştu.Hata: {}, Satinalma id: {}".format(
                                                 satinalma_id,
                                                 exc)
                                             )
            return abort(500)

        return render_template("satinalma_dashboard/muhasebe_fisi_olustur.html",
                               muhasebe_fis_formu=muhasebe_fis_formu,
                               proje_bilgileri=proje_bilgiler_data,
                               proje_kalemi_data=proje_kalemi_data,
                               satinalma=satinalma,
                               satinalma_id=satinalma_id,
                               siparis_id=siparis_id)
コード例 #7
0
    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)