Exemplo n.º 1
0
    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)
Exemplo n.º 2
0
    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,
                              )
Exemplo n.º 3
0
    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
                               )
Exemplo n.º 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)
Exemplo n.º 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)
Exemplo n.º 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)
Exemplo n.º 7
0
    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)
Exemplo n.º 8
0
    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
Exemplo n.º 9
0
    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