static NetleEFatura GetSMMInvoice(Guid uuid)
        {
            var nef = new NetleEFatura();

            nef.GUID = Guid.NewGuid().ToString();
            ///  Belge numarası, özel bir yapıdadır, ilk 3 karakter fatura serisi(Burada seri SMM olarak belirlendi),
            /// sonraki dört karakter yıl (2018) sonraki 9 karakter, müteselsil şekilde devam eden numara olmalıdır.
            /// Fatura numarası ve fatura tarihi birbiriyle sıralı olmalıdır.
            nef.DuzenlenmeTarihi = DateTime.Now;     // Belge düzenlenme zamanı
            nef.Tip      = NetleEFaturaType.SATIS;   // Bu şekilde sabit belirtilmelidir.
            nef.Aciklama = "Yalnız : DörtBinYüz TL"; // Belgede not olarak eklenecek bir açıklama varsa yazılır.
            nef.No       = "SMM2018000000315";

            // Bu şekilde sabit olmalıdır.
            nef.Senaryo = NetleEFaturaSenaryoType.EARSIVBELGE;

            // Belgeyi kesen kişi / firmanın bilgileri. Belge bir şahıs tarafından kesiliyorsa Sahis bölümü doldurulmalıdır.
            nef.Tedarikci = new Tedarikci
            {
                FirmaAdi = "SMMİsim SMMSoyisim ",
                Il       = "test",
                IlceSemt = "test",
                Sokak    = "Test adres 03",
                Sahis    = new Sahis {
                    Ad = "SMMİsim", Soyad = "SMMSoyisim"
                },
                /// Belgeyi kesen firmanın vergi kimlik numarası ya da şahsın tc kimlik no'su.
                /// Burada verilen değer, test hesabınıza tanımlı tckn değeridir, değiştirmeniz halinde sistemden hata alırsınız
                VergiNoTCKimlikNo = "98745612309",
                Ulke         = "TR",
                VergiDairesi = "Test"
            };

            nef.Musteri = new Musteri() // Belgenin alıcısı
            {
                FirmaAdi = "Musteriİsim MusteriSoyisim",
                Sokak    = "Test",
                Il       = "İzmir",
                IlceSemt = "Test",

                // Bir şahsa kesiliyorsa doldurulmalı
                Sahis = new Sahis {
                    Ad = "Musteriİsim", Soyad = "MusteriSoyisim"
                },

                VergiNoTCKimlikNo = "20231264774",
                Ulke         = "TR",
                VergiDairesi = "Test"
            };

            // Faturanın kalemleri bu listeye atılacak, sonrasında nef nesnesinin FaturaKalemleri elemanı bu listenin array'e çevrilmesiyle elde edilecek
            var fatKalemList = new List <FaturaKalemi>();

            /// ilk fatura kalemi
            var fatKalem = new FaturaKalemi();

            // Burada standart uluslararası birim kodları kullanılmalıdır. C62 Adet anlamına gelir.
            fatKalem.Birim       = "C62";
            fatKalem.BirimFiyat  = 113.6364;
            fatKalem.ToplamTutar = 113.6364;
            fatKalem.DovizTipi   = "TRY";

            // Verilen hizmetin ismi de yazılabilir.
            fatKalem.StokAdi = "Deneme";

            /// Fatura kaleminin vergileri bu listeye atılacak, sonrasında FaturaKalemi nesnesinin
            /// Vergiler elemanı bu listenin array'e çevrilmesiyle elde edilecek.
            var vergiler = new List <Vergi>();

            // vergi türü, 0015 Kdv anlamına gelmektedir.
            var vergi = new Vergi();

            vergi.Tur    = TaxCodeContentType.Item0015;
            vergi.Oran   = 8;
            vergi.Tutar  = 9.0909;
            vergi.Matrah = 113.6364;
            vergiler.Add(vergi);

            // vergi türü, 0003 stopaj anlamına gelmektedir.
            vergi        = new Vergi();
            vergi.Tur    = TaxCodeContentType.Item0003;
            vergi.Oran   = 20;
            vergi.Tutar  = 22.7273;
            vergi.Matrah = 113.6364;
            vergiler.Add(vergi);

            fatKalem.Vergiler = vergiler.ToArray();
            fatKalemList.Add(fatKalem);

            /// ikinci fatura kalemi
            /// fatKalem = new FaturaKalemi();
            fatKalem.Birim       = "C62";
            fatKalem.BirimFiyat  = 2840.9091;
            fatKalem.ToplamTutar = 2840.9091;
            fatKalem.DovizTipi   = "TRY";
            fatKalem.StokAdi     = "Deneme 2";

            vergiler = new List <Vergi>();
            vergi    = new Vergi();

            vergi.Tur    = TaxCodeContentType.Item0015;
            vergi.Oran   = 8; vergi.Tutar = 227.2727;
            vergi.Matrah = 2840.9091;
            vergiler.Add(vergi);

            vergi        = new Vergi();
            vergi.Tur    = TaxCodeContentType.Item0003;
            vergi.Oran   = 20; vergi.Tutar = 568.1818;
            vergi.Matrah = 2840.9091;
            vergiler.Add(vergi);
            fatKalem.Vergiler = vergiler.ToArray();
            fatKalemList.Add(fatKalem);

            /// üçüncü fatura kalemi

            fatKalem             = new FaturaKalemi();
            fatKalem.Birim       = "C62";
            fatKalem.BirimFiyat  = 1704.5455;
            fatKalem.ToplamTutar = 1704.5455;
            fatKalem.DovizTipi   = "TRY";
            fatKalem.StokAdi     = "Deneme 3";

            vergiler     = new List <Vergi>(); vergi = new Vergi();
            vergi.Tur    = TaxCodeContentType.Item0015;
            vergi.Oran   = 8; vergi.Tutar = 136.3636;
            vergi.Matrah = 1704.5455;
            vergiler.Add(vergi);

            vergi        = new Vergi();
            vergi.Tur    = TaxCodeContentType.Item0003;
            vergi.Oran   = 20;
            vergi.Tutar  = 340.9091;
            vergi.Matrah = 1704.5455;
            vergiler.Add(vergi);
            fatKalem.Vergiler = vergiler.ToArray();
            fatKalemList.Add(fatKalem);

            nef.FaturaKalemleri = fatKalemList.ToArray();

            /// Toplam tutara ilişkin bilgiler oluşturuluyor:
            /// Toplam tutar için toplam vergi bilgisi oluşturuluyor
            vergiler     = new List <Vergi>();
            vergi        = new Vergi();
            vergi.Tur    = TaxCodeContentType.Item0015;
            vergi.Oran   = 8;
            vergi.Tutar  = 372.73;
            vergi.Matrah = 4659.125;
            vergiler.Add(vergi);

            vergi        = new Vergi();
            vergi.Tur    = TaxCodeContentType.Item0003;
            vergi.Oran   = 20;
            vergi.Tutar  = 931.82;
            vergi.Matrah = 4659.1;
            vergiler.Add(vergi);
            nef.Vergiler = vergiler.ToArray();

            nef.ToplamTutar         = 4659.09;
            nef.OdenecekToplamTutar = 4100; nef.DovizTipi = "TRY";
            nef.VergilerDahilTutar  = 4100;
            nef.KaynakDokumanTuru   = KaynakDokumanTuru.ESERBESTMESLEKMAKBUZU;

            /// SMM belgeleri alıcıya iki şekilde gönderilir, kağıt çıktısı alınarak ya da elektonik yolla e-posta gönderilerek.
            /// Bu gönderim tipi belgede belirtilmelidir çünkü bu bilgi emtegratör tarafından ay sonunda oluşturulup
            /// GIB'e gönderilecek raporda doğru biçimde bildirilmelidir.
            nef.GonderimTipi = GonderimTipi.KAGIT;

            return(nef);
        }
예제 #2
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);
    }
예제 #3
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
    }