예제 #1
0
    /// <summary>
    /// Senaryo 1
    /// •   Token oluşturma.
    /// •	NetleEFatura formatında bir e-arşiv hazırlama.
    /// •	Faturayı web servise gönderme.
    /// •	Faturayı indirme.
    /// •	Faturanın html’ini alma.
    /// </summary>
    public static void PrepareElectronicArchiveByNetleEFatura()
    {
        Integration10 client = new Integration10();

        client.Url = @" https://efaturatest.inposia.com.tr/CommonInvoice.Web.Service/Integration10.asmx";
        var token = client.CreateUserToken(@"UserName", "Password", ModuleType.eArchive);
        var nef   = new NetleEFatura();

        #region [  invoice header  ]
        var uniqueId = Guid.NewGuid(); nef.GUID = uniqueId.ToString();
        nef.Tedarikci = new Tedarikci()               // sender information
        {
            FirmaAdi          = "Sender Company",     // company name
            VergiNoTCKimlikNo = "1122334456",         // company tax number
            WebAdresi         = "www.inposia.com.tr", // web address
            Il           = "izmir",                   // city
            IlceSemt     = "konak",                   //district
            Ulke         = "Türkiye",                 //country
            PostaKodu    = "35000",                   // postal code
            VergiDairesi = "konak"                    // tax office
        };

        nef.Musteri = new Musteri()                                        // receiver / customer information
        {
            Alias             = "urn:mail:[email protected]", // receiver alias
            FirmaAdi          = "Receiver Company",                        // company name
            VergiNoTCKimlikNo = "1623427874",                              // company tax number
            WebAdresi         = "www.inposia.com.tr",                      // web adress
            Il           = "izmir",                                        // city
            IlceSemt     = "konak",                                        // district
            Ulke         = "Türkiye",                                      // country
            PostaKodu    = "35310",                                        // post code
            VergiDairesi = "konak"                                         //tax office
        };

        nef.DuzenlenmeTarihi = DateTime.Now;
        nef.No                  = "ABC2016000000629";
        nef.DovizTipi           = "TRY";
        nef.KDVTutari           = 36; nef.ToplamTutar = 200;
        nef.OdenecekToplamTutar = 236;
        nef.Tip                 = NetleEFaturaType.SATIS;
        nef.Senaryo             = NetleEFaturaSenaryoType.TEMELFATURA;

        #endregion

        #region [  items  ]

        nef.FaturaKalemleri = new FaturaKalemi[]
        {
            new FaturaKalemi()
            {
                Aciklama        = "energry drink", //description
                Miktar          = 2,               // quantity
                MusteriStokNo   = "MusStok001",    // customer stock code
                TedarikciStokNo = "TedStok001",    // supplier stock code
                UreticiStokNo   = "UretStok001",   // manufacturer stock code
                BirimFiyat      = 100,             // unit price
                ToplamTutar     = 200,             // total amount
                KDVOrani        = 18,              //vat rate
                KDVTutari       = 36,              // vat amount
                StokAdi         = "energy drink",  // item name
                Birim           = "NIU",           // unit
                DovizTipi       = "TRY"            // currency
            }
        };

        #endregion

        var uuid = Guid.NewGuid();
        client.UploadInvoice(token, uuid, "", nef);
        var di = client.GetEArchiveStatus(token, uuid);
        Console.WriteLine("Status : " + di.OK);
        var html = client.GetCommonDocumentHtmlByUUID(token, uuid);
    }
예제 #2
0
    /// <summary>
    /// •   (daha önceden güvenlik-token) yoksa, oluştur ve işlemlere hazır hale gel
    /// •	NetleEFatura formatında bir e-arşiv hazırlama.
    /// •	Faturayı web servise gönderme.
    /// </summary>
    public static void NetleEFaturaNesnesiniEArsivIcinHazirlaVeGonder()
    {
        CheckToken();

        var nef = new NetleEFatura();

        #region [  invoice header  ]

        ///e-arşiv belgesi için tekil anahtar değeri
        ///bu örnekte yeni yaratılıyor...
        ///eğer gitmemiş ya da daha önceden veri tabanına yazılan bir kayıt varsa, o değer kullanılmalıdır
        var uniqueId = Guid.NewGuid();

        nef.GUID      = uniqueId.ToString();
        nef.Tedarikci = new Tedarikci()               // sender information
        {
            FirmaAdi          = "Sender Company",     // company name
            VergiNoTCKimlikNo = "1122334456",         // company tax number
            WebAdresi         = "www.inposia.com.tr", // web address
            Il           = "izmir",                   // city
            IlceSemt     = "konak",                   //district
            Ulke         = "Türkiye",                 //country
            PostaKodu    = "35000",                   // postal code
            VergiDairesi = "konak"                    // tax office
        };

        nef.Musteri = new Musteri()                                        // receiver / customer information
        {
            Alias             = "urn:mail:[email protected]", // receiver alias
            FirmaAdi          = "Receiver Company",                        // company name
            VergiNoTCKimlikNo = "1623427874",                              // company tax number
            WebAdresi         = "www.inposia.com.tr",                      // web adress
            Il           = "izmir",                                        // city
            IlceSemt     = "konak",                                        // district
            Ulke         = "Türkiye",                                      // country
            PostaKodu    = "35310",                                        // post code
            VergiDairesi = "konak"                                         //tax office
        };

        nef.DuzenlenmeTarihi = DateTime.Now;

        ///bu değer gönderici firma bazında tekil olmalıdır.
        ///GİB tarafından belirlenen formata uygun hazırlanmalıdır.
        ///Gönderici firma ve modül bazında (efatura, earsiv, eirsaliye, esmm, emm) PREFIX (ABC) değeri tekil olmalıdır
        ///earsiv icin "ABC" kullanılıyorsa, efatura icin kesinlikle "ABC" başlangıç (PREFIX) değeri kullanılamaz!!!
        ///yıl 2020 : bu değer fatura tarihindeki yıl bilgisidir. Fatura tarihindeki YIL ile No içindeki YIL değeri aynı olmalıdır.
        ///son 9 hane : bu alan tekil, ardışık (sıra atlamadan) üretilmelidir. Bu numara VUK sistemindeki basılı - kağıt fatura serisi numarası
        ///gibi işlenmelidir.
        nef.No = "ABC" + nef.DuzenlenmeTarihi.Year.ToString() + "000000629";

        nef.DovizTipi           = "TRY";
        nef.KDVTutari           = 36; nef.ToplamTutar = 200;
        nef.OdenecekToplamTutar = 236;
        nef.Tip     = NetleEFaturaType.SATIS;
        nef.Senaryo = NetleEFaturaSenaryoType.TEMELFATURA;

        #endregion

        #region [  items  ]

        nef.FaturaKalemleri = new FaturaKalemi[]
        {
            new FaturaKalemi()
            {
                Aciklama        = "energry drink", //description
                Miktar          = 2,               // quantity
                MusteriStokNo   = "MusStok001",    // customer stock code
                TedarikciStokNo = "TedStok001",    // supplier stock code
                UreticiStokNo   = "UretStok001",   // manufacturer stock code
                BirimFiyat      = 100,             // unit price
                ToplamTutar     = 200,             // total amount
                KDVOrani        = 18,              //vat rate
                KDVTutari       = 36,              // vat amount
                StokAdi         = "energy drink",  // item name
                Birim           = "NIU",           // unit
                DovizTipi       = "TRY"            // currency
            }
        };

        #endregion

        ///Öneri
        ///olusan belgeyi yerel sistemdeki (firma/desktop/web/cloud) veritabanına ekle
        ///daha onceden kontrol edilmis mi kontrol et, yoksa durumunu ='ErcStateMachineCode.Init' olarak UUID değeri ile
        ///veri tabanına ekle
        var uuid = Guid.Parse(nef.GUID);

        ///entegratör sistemi birçok duruma özel hata kodu fırlatabilir.
        ///örnek : şematron hatası, vergi kimlik hatası, tekrarlı kayıt vb.
        ///bu durumda işlem durum kodları guncellenmelidir.
        try
        {
            client.UploadInvoice(token, uuid, "", nef);

            ///Öneri
            ///entegratör sistemine ilgili tekil anahtarlı (UUID) belgesi başarılı şekilde iletildi
            ///SQL : Update ???? Set
            ///IslemKodu=0,
            ///IslemAciklamasi=null,
            ///FinalState=False, //durum sorgulama yöntemin bu belge dikkate alınacak
            ///Durum=ErcStateMachineCode.Uploaded
            ///Where UUID=nef.Guid
        }
        catch (System.Web.Services.Protocols.SoapException sexc) //entegratör tarafından SOAP tabanlı hata geliyor
        {
            var errorCode    = GetErrorCodeFromSoapException(sexc);
            var errorMessage = sexc.Message;
            ///Öneri
            ///entegratör sistemine ilgili tekil anahtarlı (UUID) belgesi iletilememiş olabilir.
            ///durum kodu ve hata yerel sistemdeki veritabanında güncellenmelidir.
            ///SQL : Update ???? Set
            ///IslemKodu=errorCode,
            ///IslemAciklamasi=errorMessage,

            /////durum sorgulama yönteminde bu belge artık dikkate alınmayacak  cunku ileri dönemde bu durum kodu değişmeyecek
            ///FinalState=True,

            ///Durum=ErcStateMachineCode.Failed
            ///Where UUID=nef.Guid
            throw new Exception("Entegratör ortamına ilgili e-arşiv belgesi iletilemedi. Hata : " + string.Join(":", errorCode, errorMessage));
        }
        catch (Exception exc) //entegratör bağımsız olası hatalar gelebilir (ağ bağlantısı kesildi gibi)
        {
            ///Öneri
            ///entegratör sistemine ilgili tekil anahtarlı (UUID) belgesi iletilememiş olabilir.
            ///durum kodu ve hata yerel sistemdeki veritabanında güncellenmelidir.
            ///SQL : Update ???? Set
            ///IslemKodu="-1",  //unknown exception code
            ///IslemAciklamasi=exc.Message,
            ///FinalState=False,
            ///Durum=ErcStateMachineCode.ReSendable
            ///Where UUID=nef.Guid
            throw new Exception("E-arşiv belgesi iletilemedi. Hata : " + exc.Message);
        }

        ///Öneri:
        ///gönderim sonrasında durum sorgulama işlemi modellenmemelidir.
        ///E-arşiv gönderimleri e-fatura süreçelerine göre daha kısa sürede cevaplanıyor olsa da
        ///ayrı bir işlem ile durum güncelleme süreci modellenemelidir.

        ///Durum sorgulama süreci iki yöntem şeklinde olabilir
        ///Sorgulama modeli 1:
        ///background-servis/thread/işlem gibi yerlerde durum kodlarına göre uygun durumda kayıtların tekil anahtarları alınmalı
        ///durum sorgulaması yapılmalı ve son durum guncellenmelidir
        ///
        ///Sorgulama modeli 2 :
        ///background ortamında yapılan işlem son kullanıcı tarafından anlık olarak da tetiklenebilmelidir.
        ///kullanıcı gönderilen e-arşiv listesini ekranda izledikten sonra, "refresh-durum kodlarını güncelle" gibi bir işlem ile anlık
        ///tetikleyebilir.

        ///Önerilen şekilde ve mimaride durum sorgulama yapılabilmesi icin bu kod içindeki diğer yönteme benzer adımlar tasarlanabilir.
        ///yöntem adı : EArsivBelgelerineIliskinDurumKodlariniGuncelleVeYerelSistemeYaz
    }