/// <summary> /// Senaryo: /// • Oturum Açma /// • E-SMM Makbuz Yükleme /// • Makbuz Durumunu Sorgulama /// • Makbuz Pdf Alma /// • Makbuz Html Alma /// • Makbuz Arama /// • Makbuz İptal Etme /// </summary> public static void PrepareESMMByNetleEFatura() { try { var client = new Integration10(); client.Url = "https://efaturatest.inposia.com.tr/CommonInvoice.Web.Service/Integration10.asmx"; // Modül tipi olarak eSEVoucher kullanılması önemlidir var smmToken = client.CreateUserToken(@"KullanıcıAdı", "Şifre", ModuleType.eSEVoucher); /// smmNEF, NetleEFatura tipinde oluşturulmuş serbest meslek makbuzu belgesidir /// documentUUID değeri, o belgeye has tekil bir değer olacaktır ve gelecek sorgulamalarda kullanılacaktır, kullanıcı tarafından oluşturulup verilir /// prefix değeri, belgenin numarasıyla ilgilidir, şu aşamada boş bırakılmalıdır var uuid = Guid.NewGuid(); client.UploadCommonDocument(smmToken, uuid, "", GetSMMInvoice(uuid)); Console.WriteLine("Makbuz gönderildi"); System.Threading.Thread.Sleep(5000); // Gönderim gerçekleştirildikten sonra, arka planda asenkron makbuz oluşturma işleminin bitmesi beklenmelidir. // Ardından, makbuz durumu sorgulanarak gönderimin durumu sorgulanmalıdır. Başarılı olan makbuzlar için pdf alma işlemine geçilebilir. var status = client.GetEArchiveStatus(smmToken, uuid); // makbuz durumu sorgulanabilir Console.WriteLine("Gönderildi mi ? :" + status.OK); var pdf = client.GetCommonDocumentPDFByUUIDs(smmToken, new UbltrPDFInput[] { new UbltrPDFInput { UUID = uuid } }); //uuid değerine göre pdf elde edilir if (pdf.Length > 0) { File.WriteAllBytes(@"C:\temp\" + uuid.ToString() + ".pdf", pdf[0].PDFContent); } else { Console.WriteLine("Pdf alınamadı"); } // uuid değerine göre html elde edilir var html = client.GetCommonDocumentHtmlByUUID(smmToken, uuid); if (html.Length > 0) { File.WriteAllText(@"c:\temp\test.html", html); } var seado = new SearchEArcDocumentOption() { //Döküman numarası, doldurulmassa filtreye uyan tüm dökümanlar InvoiceNumber = "SMM2018000000315", // Tarih aralığı başlangıç değeri StartDateTime = DateTime.Parse("2018-06-03"), //Tarih aralığı bitiş değeri EndDateTime = DateTime.Parse("2018-06-22") }; var search = client.SearchEArchive(smmToken, seado); //uuid değerine göre makbuz iptal edilir client.DeleteEArchive(smmToken, uuid); } catch (Exception exc) { Console.WriteLine("Gönderim sürecinde hata oluştu. Hata detayı : " + exc.Message); } }
/// <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); }
/// <summary> /// • (daha önceden güvenlik-token) yoksa, oluştur ve işlemlere hazır hale gel /// • Durumu sorgulanması gereken ve süreci sonlandırılmamış kayıtları yerel veritabanı ortamından listeyi al (UUID array) /// • Entegratör ortamına erişim yaparak güncel durum kodunu alarak yerel sistemde güncelle /// </summary> public static void EArsivBelgelerineIliskinDurumKodlariniGuncelleVeYerelSistemeYaz() { ///Öneri: ///Yerel ortam log kayıtları guncellenir ///AddLog("e-arsiv durum sorgulama calisiyor...", DateTime.Now, UserId, MachineId); string[] uuids = null; ///Öneri ///Yerel veritabanından liste alınır ///SQL ///uuids=ExecOnDB("Select UUID from ???? Where (FinalState=False) And (Durum In ('Uploaded','Processing'))"); ///sorgulanacak kayıt yoksa çık if (uuids == null || uuids.Length == 0) { return; } try { CheckToken(); foreach (var uuid in uuids) { try { var earcStatus = client.GetEArchiveStatus(token, Guid.Parse(uuid)); if (earcStatus.OK) { ///e-arşiv belgesi başarılı şekilde iletildi (++++) ///Öneri ///SQL : Update ???? Set IslemKodu=0, IslemAciklamasi=null, FinalState=True, Durum=ErcStateMachineCode.OnSuccess Where UUID=nef.Guid } else { ///Öneri ///SQL : Update ???? Set ///IslemKodu=earcStatus.RecordStatus, ///IslemAciklamasi=string.Join(" - ", earcStatus.ErrorDescription, earcStatus.RecordStatusText), ///FinalState=CheckCodeAndGetFinalState(earcStatus.RecordStatus), ///Durum=CheckCodeAndGetStateCode(earcStatus.RecordStatus) ///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 ///SQL : Update ???? Set ///IslemKodu=errorCode, ///IslemAciklamasi=errorMessage, /////hata koduna gore bu isleme karar verilmelidir. ///FinalState=CheckCodeAndGetFinalState(errorCode), ///Durum=CheckCodeAndGetStateCode(errorCode) ///Where UUID=nef.Guid } catch (Exception exc) //entegratör bağımsız olası hatalar gelebilir (ağ bağlantısı kesildi gibi) { ///Öneri ///SQL : Update ???? Set ///IslemKodu="-1", //unknown exception code ///IslemAciklamasi=exc.Message, ///Where UUID=nef.Guid } } } catch (Exception exc) { ///AddLog("e-arsiv durum sorgulama işleminde hata var. Hata : " + exc.Message, DateTime.Now, UserId, MachineId); throw; } ///AddLog("e-arsiv durum sorgulama calisti. Sorgulanan kayıt sayısı : " + uuids.Length.ToString(), DateTime.Now, UserId, MachineId); }