private void btnNarudzbe_Click(object sender, EventArgs e) { string sql = "SELECT * FROM neuspjela_fiskalizacija"; DataTable DT = classSQL.select(sql, "neuspjela_fiskalizacija").Tables[0]; Raverus.FiskalizacijaDEV.Schema.ZaglavljeType zaglavlje = new Raverus.FiskalizacijaDEV.Schema.ZaglavljeType() { DatumVrijeme = Razno.DohvatiFormatiranoTrenutnoDatumVrijeme(), IdPoruke = Guid.NewGuid().ToString() }; X509Certificate2 certifikat = Raverus.FiskalizacijaDEV.PopratneFunkcije.Potpisivanje.DohvatiCertifikat(DTfis.Rows[0]["naziv_certifikata"].ToString()); string datum_vrijeme = DateTime.Now.ToString("dd.MM.yyyyThh:mm:ss"); for (int i = 0; i < DT.Rows.Count; i++) { XmlDocument dokument = new XmlDocument(); dokument.LoadXml(DT.Rows[i]["xml"].ToString()); XmlNamespaceManager ns = new XmlNamespaceManager(dokument.NameTable); ns.AddNamespace("tns", "http://www.apis-it.hr/fin/2012/types/f73"); string d = dokument.SelectSingleNode("/tns:RacunZahtjev/tns:Racun/tns:NakDost", ns).ChildNodes[0].Value = "true"; Raverus.FiskalizacijaDEV.CentralniInformacijskiSustav cis = new CentralniInformacijskiSustav(); if (Class.Postavke.TEST_FISKALIZACIJA) { cis.CisUrl = "https://cistest.apis-it.hr:8449/FiskalizacijaServiceTest"; } else { cis.CisUrl = "https://cis.porezna-uprava.hr:8449/FiskalizacijaService"; } Raverus.FiskalizacijaDEV.PopratneFunkcije.Potpisivanje.PotpisiXmlDokument(dokument, certifikat); Raverus.FiskalizacijaDEV.PopratneFunkcije.XmlDokumenti.DodajSoapEnvelope(ref dokument); try { DateTime dd; DateTime.TryParse(DT.Rows[i]["date"].ToString(), out dd); string id_kasa = DT.Rows[i]["id_kasa"].ToString(); string id_ducan = DT.Rows[i]["id_ducan"].ToString(); XmlDocument odgovor = cis.PosaljiSoapPoruku(dokument); string jir = Raverus.FiskalizacijaDEV.PopratneFunkcije.XmlDokumenti.DohvatiJir(odgovor); provjera_sql(classSQL.delete("DELETE FROM neuspjela_fiskalizacija WHERE broj_racuna='" + DT.Rows[i]["broj_racuna"].ToString() + "'" + " AND id_kasa='" + id_kasa + "' AND id_ducan='" + id_ducan + "'")); provjera_sql(classSQL.update("UPDATE racuni SET jir='" + jir + "' WHERE broj_racuna='" + DT.Rows[i]["broj_racuna"].ToString() + "'" + " AND godina='" + dd.Year.ToString() + "' AND id_kasa='" + id_kasa + "' AND id_ducan='" + id_ducan + "'" + "")); } catch (Exception ex) { MessageBox.Show("Greška kod fiskalizacije\r\n\r\n\r\n" + cis.OdgovorGreska.InnerXml + ex.ToString() + "\r\n\r\n\r\n\r\n\r\n" + ex.ToString(), "Greška od strane FINE"); } } Set(); }
private static void EchoPrimjer() { Raverus.FiskalizacijaDEV.CentralniInformacijskiSustav cis = new CentralniInformacijskiSustav(); bool bTest = cis.Echo(); bTest = cis.Echo("moj test"); XmlDocument doc = cis.PosaljiEcho(""); doc = cis.PosaljiEcho("moja poruka"); doc = Raverus.FiskalizacijaDEV.PopratneFunkcije.XmlDokumenti.DohvatiPorukuEchoZahtjev("moj prvi test"); doc = cis.PosaljiSoapPoruku(doc); }
private void Fiskalizacija1() { string xml = @"<?xml version=""1.0"" encoding=""utf-8""?>" + @"<tns:RacunZahtjev xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" Id=""signXmlId"" xmlns:tns=""http://www.apis-it.hr/fin/2012/types/f73"">" + @"<tns:Zaglavlje>" + @"<tns:IdPoruke>cff93023-850b-403c-ac8b-277619e81dc9</tns:IdPoruke>" + @"<tns:DatumVrijeme>21.10.2012T10:10:28</tns:DatumVrijeme>" + @"</tns:Zaglavlje>" + @"<tns:Racun>" + @"<tns:Oib>47165970760</tns:Oib>" + @"<tns:USustPdv>true</tns:USustPdv>" + @"<tns:DatVrijeme>21.10.2012T10:10:22</tns:DatVrijeme>" + @"<tns:OznSlijed>P</tns:OznSlijed>" + @"<tns:BrRac><tns:BrOznRac>1</tns:BrOznRac>" + @"<tns:OznPosPr>123</tns:OznPosPr>" + @"<tns:OznNapUr>1</tns:OznNapUr>" + @"</tns:BrRac>" + @"<tns:Pdv>" + @"<tns:Porez>" + @"<tns:Stopa>25.00</tns:Stopa>" + @"<tns:Osnovica>10.00</tns:Osnovica>" + @"<tns:Iznos>2.50</tns:Iznos>" + @"</tns:Porez>" + @"</tns:Pdv>" + @"<tns:IznosUkupno>12.50</tns:IznosUkupno>" + @"<tns:NacinPlac>G</tns:NacinPlac>" + @"<tns:OibOper>47165970760</tns:OibOper>" + @"<tns:ZastKod>e4d909c290d0fb1ca068ffaddf22cbd0</tns:ZastKod>" + @"<tns:NakDost>false</tns:NakDost>" + @"</tns:Racun>" + @"</tns:RacunZahtjev>"; XmlDocument dokument = new XmlDocument(); dokument.LoadXml(xml); Raverus.FiskalizacijaDEV.CentralniInformacijskiSustav cis = new CentralniInformacijskiSustav(); X509Certificate2 certifikat = Raverus.FiskalizacijaDEV.PopratneFunkcije.Potpisivanje.DohvatiCertifikat("FISKAL 1"); Raverus.FiskalizacijaDEV.PopratneFunkcije.Potpisivanje.PotpisiXmlDokument(dokument, certifikat); Raverus.FiskalizacijaDEV.PopratneFunkcije.XmlDokumenti.DodajSoapEnvelope(ref dokument); XmlDocument odgovor = cis.PosaljiSoapPoruku(dokument); }
private void SnimiDokumentUDatoteku(string oib) { Raverus.FiskalizacijaDEV.CentralniInformacijskiSustav cis = new CentralniInformacijskiSustav(); Raverus.FiskalizacijaDEV.Schema.RacunType racun = GetRacun(oib); Schema.RacunZahtjev zahtjev = PopratneFunkcije.XmlDokumenti.KreirajRacunZahtjev(racun); XmlDocument zahtjevXml = PopratneFunkcije.XmlDokumenti.SerijalizirajRacunZahtjev(zahtjev); PopratneFunkcije.Potpisivanje.PotpisiXmlDokument(zahtjevXml, PopratneFunkcije.Potpisivanje.DohvatiCertifikat("FISKAL 1")); PopratneFunkcije.XmlDokumenti.DodajSoapEnvelope(ref zahtjevXml); Raverus.FiskalizacijaDEV.PopratneFunkcije.XmlDokumenti.SnimiXmlDokumentDatoteka(zahtjevXml, @"D:\Users\Nino\Desktop\Zahtjev.xml"); XmlDocument doc = cis.PosaljiSoapPoruku(zahtjevXml); Raverus.FiskalizacijaDEV.PopratneFunkcije.XmlDokumenti.SnimiXmlDokumentDatoteka(doc, @"D:\Users\Nino\Desktop\Odgovor.xml"); }
private void ObradaGreske(string oib) { //Greška je u datumu i vremenu slanja, "21.10.201210:10:28" umjesto "21.10.2012T10:10:28" string xml = @"<?xml version=""1.0"" encoding=""utf-8""?><tns:RacunZahtjev xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" Id=""signXmlId"" xmlns:tns=""http://www.apis-it.hr/fin/2012/types/f73""><tns:Zaglavlje><tns:IdPoruke>cff93023-850b-403c-ac8b-277619e81dc9</tns:IdPoruke><tns:DatumVrijeme>21.10.201210:10:28</tns:DatumVrijeme></tns:Zaglavlje><tns:Racun><tns:Oib>44718633471</tns:Oib><tns:USustPdv>true</tns:USustPdv><tns:DatVrijeme>21.10.2012T10:10:22</tns:DatVrijeme><tns:OznSlijed>P</tns:OznSlijed><tns:BrRac><tns:BrOznRac>1</tns:BrOznRac><tns:OznPosPr>123</tns:OznPosPr><tns:OznNapUr>1</tns:OznNapUr></tns:BrRac><tns:Pdv><tns:Porez><tns:Stopa>25.00</tns:Stopa><tns:Osnovica>10.00</tns:Osnovica><tns:Iznos>2.50</tns:Iznos></tns:Porez></tns:Pdv><tns:IznosUkupno>12.50</tns:IznosUkupno><tns:NacinPlac>G</tns:NacinPlac><tns:OibOper>12345678900</tns:OibOper><tns:ZastKod>e4d909c290d0fb1ca068ffaddf22cbd0</tns:ZastKod><tns:NakDost>false</tns:NakDost></tns:Racun></tns:RacunZahtjev>"; XmlDocument dokument = new XmlDocument(); dokument.LoadXml(xml); Raverus.FiskalizacijaDEV.CentralniInformacijskiSustav cis = new CentralniInformacijskiSustav(); X509Certificate2 certifikat = Raverus.FiskalizacijaDEV.PopratneFunkcije.Potpisivanje.DohvatiCertifikat("FISKAL 1"); PopratneFunkcije.Potpisivanje.PotpisiXmlDokument(dokument, certifikat); PopratneFunkcije.XmlDokumenti.DodajSoapEnvelope(ref dokument); try { XmlDocument odgovor = cis.PosaljiSoapPoruku(dokument); if (odgovor != null) { string jir = Raverus.FiskalizacijaDEV.PopratneFunkcije.XmlDokumenti.DohvatiJir(odgovor); MessageBox.Show(jir); } } catch (Exception ex) { if (cis.OdgovorGreska != null) { MessageBox.Show(cis.OdgovorGreska.InnerXml); MessageBox.Show(Raverus.FiskalizacijaDEV.PopratneFunkcije.XmlDokumenti.DohvatiSifruGreske(cis.OdgovorGreska, PopratneFunkcije.TipDokumentaEnum.RacunOdgovor)); MessageBox.Show(Raverus.FiskalizacijaDEV.PopratneFunkcije.XmlDokumenti.DohvatiPorukuGreske(cis.OdgovorGreska, PopratneFunkcije.TipDokumentaEnum.RacunOdgovor)); MessageBox.Show(Raverus.FiskalizacijaDEV.PopratneFunkcije.XmlDokumenti.DohvatiGreskuRezultataZahtjeva(cis.OdgovorGreska)); } else { MessageBox.Show(String.Format("Greška: {0}", ex.Message)); } } }
private void CertifikatDatoteka(string oib) { Raverus.FiskalizacijaDEV.CentralniInformacijskiSustav cis = new CentralniInformacijskiSustav(); Raverus.FiskalizacijaDEV.Schema.RacunType racun = GetRacun(oib); X509Certificate2 cert = Raverus.FiskalizacijaDEV.PopratneFunkcije.Potpisivanje.DohvatiCertifikat(@"D:\Users\Nino\Desktop\Fiskalizacija\MojCert.pfx", "PASSWORD"); if (cert != null) { // varijanta 1 XmlDocument odgovor = cis.PosaljiRacun(racun, cert); // varijanta 2 Schema.RacunZahtjev zahtjev = PopratneFunkcije.XmlDokumenti.KreirajRacunZahtjev(racun); XmlDocument zahtjevXml = PopratneFunkcije.XmlDokumenti.SerijalizirajRacunZahtjev(zahtjev); PopratneFunkcije.Potpisivanje.PotpisiXmlDokument(zahtjevXml, cert); PopratneFunkcije.XmlDokumenti.DodajSoapEnvelope(ref zahtjevXml); XmlDocument doc = cis.PosaljiSoapPoruku(zahtjevXml); } }
private void Fiskalizacija(string oib, string oib_operatera) { string xml = @"<?xml version=""1.0"" encoding=""utf-8""?>" + @"<tns:RacunZahtjev xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" Id=""signXmlId"" xmlns:tns=""http://www.apis-it.hr/fin/2012/types/f73"">" + @"<tns:Zaglavlje>" + @"<tns:IdPoruke>cff93023-850b-403c-ac8b-277619e81dc9</tns:IdPoruke>" + @"<tns:DatumVrijeme>" + DateTime.Now.ToString("dd.MM.yyyyThh:mm:ss") + "</tns:DatumVrijeme>" + @"</tns:Zaglavlje>" + @"<tns:Racun>" + @"<tns:Oib>" + oib + "</tns:Oib>" + @"<tns:USustPdv>true</tns:USustPdv>" + @"<tns:DatVrijeme>09.11.2012T12:25:28</tns:DatVrijeme>" + @"<tns:OznSlijed>" + DTfis.Rows[0]["oznaka_slijednosti"].ToString() + "</tns:OznSlijed>" + @"<tns:BrRac>" + @"<tns:BrOznRac>1</tns:BrOznRac>" + @"<tns:OznPosPr>123</tns:OznPosPr>" + @"<tns:OznNapUr>1</tns:OznNapUr>" + @"</tns:BrRac>" + @"<tns:OstaliPor>" + @"<tns:Porez>" + @"<tns:Naziv>Porez na luksuz</tns:Naziv>" + @"<tns:Stopa>15.00</tns:Stopa>" + @"<tns:Osnovica>10.00</tns:Osnovica>" + @"<tns:Iznos>1.50</tns:Iznos>" + @"</tns:Porez>" + @"</tns:OstaliPor>" + @"<tns:IznosOslobPdv>12.00</tns:IznosOslobPdv>" + @"<tns:IznosMarza>13.00</tns:IznosMarza>" + @"<tns:Naknade>" + @"<tns:Naknada>" + @"<tns:NazivN>Povratna naknada</tns:NazivN>" + @"<tns:IznosN>1.00</tns:IznosN>" + @"</tns:Naknada>" + @"</tns:Naknade>" + @"<tns:IznosUkupno>12.50</tns:IznosUkupno>" + @"<tns:NacinPlac>G</tns:NacinPlac>" + @"<tns:OibOper>" + oib_operatera + "</tns:OibOper>" + @"<tns:ZastKod>e4d909c290d0fb1ca068ffaddf22cbd0</tns:ZastKod>" + @"<tns:NakDost>false</tns:NakDost>" + @"</tns:Racun>" + @"</tns:RacunZahtjev>"; XmlDocument dokument = new XmlDocument(); dokument.LoadXml(xml); Raverus.FiskalizacijaDEV.CentralniInformacijskiSustav cis = new CentralniInformacijskiSustav(); X509Certificate2 certifikat = Raverus.FiskalizacijaDEV.PopratneFunkcije.Potpisivanje.DohvatiCertifikat("FISKAL 1"); Raverus.FiskalizacijaDEV.PopratneFunkcije.Potpisivanje.PotpisiXmlDokument(dokument, certifikat); Raverus.FiskalizacijaDEV.PopratneFunkcije.XmlDokumenti.DodajSoapEnvelope(ref dokument); try { XmlDocument odgovor = cis.PosaljiSoapPoruku(dokument); if (odgovor != null) { string jir = Raverus.FiskalizacijaDEV.PopratneFunkcije.XmlDokumenti.DohvatiJir(odgovor); MessageBox.Show(jir); } } catch (Exception ex) { if (cis.OdgovorGreska != null) { MessageBox.Show(cis.OdgovorGreska.InnerXml); } else { MessageBox.Show(String.Format("Greska: {0}", ex.Message)); } } }
public static string[] Fiskalizacija(string oib, string oib_operatera, DateTime datum_racuna, int broj_rac, DataTable DTpdv, string[] porez_na_potrosnju, DataTable DTostali_porezi, string iznososlobpdv, string iznos_marza, DataTable DTnaknade, decimal ukupno, string nacin_placanja, bool naknadno_poslano, string dokumenat ) { string ZkiGotov = ""; string[] za_vratiti = new string[3]; DataTable DTducan = RemoteDB.select(string.Format("SELECT ime_ducana FROM ducan WHERE id_ducan='{0}';", DTfis.Rows[0]["oznakaPP"].ToString()), "ducan").Tables[0]; if (DTducan.Rows.Count > 0) { prodajnoMJ = DTducan.Rows[0]["ime_ducana"].ToString(); } else { prodajnoMJ = "1"; } if (dokumenat == "F") { DataTable DT = RemoteDB.select("SELECT ime_blagajne FROM blagajna WHERE id_blagajna='" + DTfis.Rows[0]["oznaka_prodajnog_mj"].ToString() + "'", "blagajna").Tables[0]; if (DT.Rows.Count > 0) { broj_kase = Convert.ToInt16(DT.Rows[0]["ime_blagajne"].ToString()); } } else if (dokumenat == "A") { DataTable DT = RemoteDB.select("SELECT ime_blagajne FROM blagajna WHERE id_blagajna='" + DTfis.Rows[0]["oznaka_prodajnog_mj_avans"].ToString() + "'", "blagajna").Tables[0]; if (DT.Rows.Count > 0) { broj_kase = Convert.ToInt16(DT.Rows[0]["ime_blagajne"].ToString()); } } if (DTfis.Rows[0]["aktivnost"].ToString() != "1") { za_vratiti[0] = ""; za_vratiti[1] = ""; za_vratiti[2] = ""; return(za_vratiti); } bool sustavPDV = false; if (DTfis.Rows[0]["sustav_pdv"].ToString() == "DA") { sustavPDV = true; } try { Raverus.FiskalizacijaDEV.Schema.ZaglavljeType zaglavlje = new Raverus.FiskalizacijaDEV.Schema.ZaglavljeType() { DatumVrijeme = datum_racuna.ToString("dd.MM.yyyyTHH:mm:ss"), IdPoruke = Guid.NewGuid().ToString() }; X509Certificate2 certifikat = Raverus.FiskalizacijaDEV.PopratneFunkcije.Potpisivanje.DohvatiCertifikat(DTfis.Rows[0]["naziv_certifikata"].ToString()); if (certifikat == null) { MessageBox.Show("Nije pravilno instalirani certifikat.", "Greška"); } string datum_vrijeme = datum_racuna.ToString("dd.MM.yyyyTHH:mm:ss"); ZkiGotov = ZKI(certifikat, oib, datum_vrijeme, broj_rac.ToString(), prodajnoMJ, broj_kase.ToString(), ukupno.ToString("#0.00").Replace(",", ".")); xml = @"<?xml version=""1.0"" encoding=""utf-8""?>" + @"<tns:RacunZahtjev xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" Id=""signXmlId"" xmlns:tns=""http://www.apis-it.hr/fin/2012/types/f73"">" + @"<tns:Zaglavlje>" + @"<tns:IdPoruke>" + zaglavlje.IdPoruke + "</tns:IdPoruke>" + @"<tns:DatumVrijeme>" + datum_vrijeme + "</tns:DatumVrijeme>" + @"</tns:Zaglavlje>" + @"<tns:Racun>" + @"<tns:Oib>" + oib + "</tns:Oib>" + @"<tns:USustPdv>" + sustavPDV.ToString().ToLower() + "</tns:USustPdv>" + @"<tns:DatVrijeme>" + datum_racuna.ToString("dd.MM.yyyyTHH:mm:ss") + "</tns:DatVrijeme>" + @"<tns:OznSlijed>" + DTfis.Rows[0]["oznaka_slijednosti"].ToString() + "</tns:OznSlijed>" + @"<tns:BrRac>" + @"<tns:BrOznRac>" + broj_rac + "</tns:BrOznRac>" + @"<tns:OznPosPr>" + prodajnoMJ + "</tns:OznPosPr>" + @"<tns:OznNapUr>" + broj_kase + "</tns:OznNapUr>" + @"</tns:BrRac>" + PDVreturn(DTpdv, sustavPDV.ToString().ToLower()) + PorezNaPotrosnju(porez_na_potrosnju) + OstaliPorezi(DTostali_porezi) + IznosOslobPdv(iznososlobpdv) + IznosMarza(iznos_marza) + Naknade(DTnaknade) + @"<tns:IznosUkupno>" + ukupno.ToString("#0.00").Replace(",", ".") + "</tns:IznosUkupno>" + @"<tns:NacinPlac>" + nacin_placanja + "</tns:NacinPlac>" + @"<tns:OibOper>" + oib_operatera + "</tns:OibOper>" + @"<tns:ZastKod>" + ZkiGotov + "</tns:ZastKod>" + @"<tns:NakDost>" + naknadno_poslano.ToString().ToLower() + "</tns:NakDost>" + @"</tns:Racun>" + @"</tns:RacunZahtjev>"; XmlDocument dokument = new XmlDocument(); dokument.LoadXml(xml); Raverus.FiskalizacijaDEV.CentralniInformacijskiSustav cis = new CentralniInformacijskiSustav(); if (DTfis.Rows[0]["test_Yes"].ToString() == "1") { cis.CisUrl = "https://cistest.apis-it.hr:8449/FiskalizacijaServiceTest"; } else { cis.CisUrl = "https://cis.porezna-uprava.hr:8449/FiskalizacijaService"; } Raverus.FiskalizacijaDEV.PopratneFunkcije.Potpisivanje.PotpisiXmlDokument(dokument, certifikat); Raverus.FiskalizacijaDEV.PopratneFunkcije.XmlDokumenti.DodajSoapEnvelope(ref dokument); try { string path = System.Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); if (!Directory.Exists(path + "/FiskalniXMLResort")) { Directory.CreateDirectory(path + "/FiskalniXMLResort"); } dokument.Save(path + "/FiskalniXMLResort/" + broj_rac + "-" + DateTime.Now.Year + ".xml"); } catch { } try { cis.TimeOut = 10000; XmlDocument odgovor = cis.PosaljiSoapPoruku(dokument); if (odgovor != null) { string jir = Raverus.FiskalizacijaDEV.PopratneFunkcije.XmlDokumenti.DohvatiJir(odgovor); za_vratiti[0] = jir; za_vratiti[1] = ZkiGotov; za_vratiti[2] = zaglavlje.IdPoruke; return(za_vratiti); } else { za_vratiti[0] = ""; za_vratiti[1] = ZkiGotov; za_vratiti[2] = zaglavlje.IdPoruke; //InsertNeuspjelaFis(broj_rac.ToString(), cis.OdgovorGreska.InnerXml, prodajnoMJ.ToString(), broj_kase.ToString(), oib_operatera, ukupno.ToString("#0.00").Replace(",", ".")); return(za_vratiti); } } catch (Exception ex) { za_vratiti[0] = ""; za_vratiti[1] = ZkiGotov; za_vratiti[2] = zaglavlje.IdPoruke; string greska; if (cis.OdgovorGreska != null) { greska = cis.OdgovorGreska.InnerXml.Replace("\'", ""); //InsertNeuspjelaFis(broj_rac.ToString(), greska.Replace("\"", ""), prodajnoMJ.ToString(), broj_kase.ToString(), oib_operatera, ukupno.ToString("#0.00").Replace(",", ".")); MessageBox.Show("Greška kod fiskalizacije\r\n\r\n\r\n" + greska.Replace("\"", "") + "\r\n\r\n\r\n\r\n\r\n", "Greška od strane FINE"); } else { greska = ex.ToString().Replace("\'", ""); //InsertNeuspjelaFis(broj_rac.ToString(), greska, prodajnoMJ.ToString(), broj_kase.ToString(), oib_operatera, ukupno.ToString("#0.00").Replace(",", ".")); MessageBox.Show("Greška kod fiskalizacije\r\n\r\n\r\n" + greska.Replace("\"", "")); } za_vratiti[1] = ZkiGotov; return(za_vratiti); } } catch (Exception) { za_vratiti[0] = ""; za_vratiti[1] = ZkiGotov; za_vratiti[2] = ""; return(za_vratiti); } }
private void btnStartTest_Click(object sender, EventArgs e) { txtLog.Text = ""; if (CheckCertificate()) { if (CheckOib()) { if (CheckSsl()) { Raverus.FiskalizacijaDEV.Schema.RacunType racun = GetRacun(certifikat); if (racun != null) { progressBar1.Maximum = iterations * 3; btnStartTest.Enabled = false; stopWatch.Reset(); RefreshLog("ECHO test počinje..."); stopWatch.Start(); Raverus.FiskalizacijaDEV.CentralniInformacijskiSustav cis = new CentralniInformacijskiSustav(); for (int i = 0; i < iterations; i++) { cis.Echo(); Application.DoEvents(); progressBar1.PerformStep(); } stopWatch.Stop(); echo = stopWatch.Elapsed.TotalSeconds; RefreshLog(String.Format("ECHO test završen. Vrijeme: {0:n4}. Prosjek: {1:n4}", echo, echo / iterations)); RefreshLog(""); RefreshLog("Račun test počinje..."); RefreshLog("Kreiranje i potpisivanje računa..."); SortedList <int, XmlDocument> sl = new SortedList <int, XmlDocument>(); stopWatch.Reset(); stopWatch.Start(); for (int i = 0; i < iterations; i++) { Schema.RacunZahtjev zahtjev = PopratneFunkcije.XmlDokumenti.KreirajRacunZahtjev(racun); XmlDocument zahtjevXml = PopratneFunkcije.XmlDokumenti.SerijalizirajRacunZahtjev(zahtjev); PopratneFunkcije.Potpisivanje.PotpisiXmlDokument(zahtjevXml, certifikat); PopratneFunkcije.XmlDokumenti.DodajSoapEnvelope(ref zahtjevXml); sl.Add(i, zahtjevXml); Application.DoEvents(); progressBar1.PerformStep(); } stopWatch.Stop(); potpis = stopWatch.Elapsed.TotalSeconds; RefreshLog(String.Format("Kreiranje i potpisivanje završeno. Vrijeme: {0:n4}. Prosjek: {1:n4}", potpis, potpis / iterations)); RefreshLog(""); RefreshLog("Slanje računa..."); stopWatch.Reset(); stopWatch.Start(); foreach (XmlDocument item in sl.Values) { cis.PosaljiSoapPoruku(item); Application.DoEvents(); progressBar1.PerformStep(); } stopWatch.Stop(); slanje = stopWatch.Elapsed.TotalSeconds; RefreshLog(String.Format("Slanje računa završeno. Vrijeme: {0:n4}. Prosjek: {1:n4}", slanje, slanje / iterations)); RefreshLog(""); RefreshLog(String.Format("Račun test završen. Vrijeme: {0:n4}. Prosjek: {1:n4}", potpis + slanje, (potpis + slanje) / iterations)); btnStartTest.Enabled = true; testFinished = true; } else { MessageBox.Show("Greška kod kreiranja test računa."); } } else { MessageBox.Show("Nije moguće uspostaviti SSL vezu prema CIS-u. Provjerite da li su potrebni certifikati uredno instalirani."); DialogResult dire = MessageBox.Show("Želite li provjeriti status CIS-a?", "Status CIS-a", MessageBoxButtons.YesNo); if (dire == DialogResult.Yes) { MessageBox.Show(Raverus.FiskalizacijaDEV.PopratneFunkcije.Razno.DohvatiStatusCisServisa().ToString()); } } } else { MessageBox.Show("Greška kod dohvata OIB-a iz certifikata."); } } }
private void btnNarudzbe_Click(object sender, EventArgs e) { string sql = "SELECT * FROM neuspjela_fiskalizacija"; DataTable DT = classSQL.select(sql, "neuspjela_fiskalizacija").Tables[0]; Raverus.FiskalizacijaDEV.Schema.ZaglavljeType zaglavlje = new Raverus.FiskalizacijaDEV.Schema.ZaglavljeType() { DatumVrijeme = Razno.DohvatiFormatiranoTrenutnoDatumVrijeme(), IdPoruke = Guid.NewGuid().ToString() }; //X509Certificate2 certifikat = Raverus.FiskalizacijaDEV.PopratneFunkcije.Potpisivanje.DohvatiCertifikat(DTfis.Rows[0]["naziv_certifikata"].ToString()); X509Certificate2 certifikat; if (File.Exists(Class.Postavke.putanja_certifikat)) { certifikat = Raverus.FiskalizacijaDEV.PopratneFunkcije.Potpisivanje.DohvatiCertifikat(Class.Postavke.putanja_certifikat, Class.Postavke.certifikat_zaporka); } else { certifikat = Raverus.FiskalizacijaDEV.PopratneFunkcije.Potpisivanje.DohvatiCertifikat(DTfis.Rows[0]["naziv_certifikata"].ToString()); } string datum_vrijeme = DateTime.Now.ToString("dd.MM.yyyyThh:mm:ss"); for (int i = 0; i < DT.Rows.Count; i++) { XmlDocument dokument = new XmlDocument(); dokument.LoadXml(DT.Rows[i]["xml"].ToString()); XmlNamespaceManager ns = new XmlNamespaceManager(dokument.NameTable); ns.AddNamespace("tns", "http://www.apis-it.hr/fin/2012/types/f73"); string d = dokument.SelectSingleNode("/tns:RacunZahtjev/tns:Racun/tns:NakDost", ns).ChildNodes[0].Value = "true"; Raverus.FiskalizacijaDEV.CentralniInformacijskiSustav cis = new CentralniInformacijskiSustav(); string testYes = File.Exists("FiskalTest") ? "1" : "0"; if (Class.Postavke.TEST_FISKALIZACIJA) { cis.CisUrl = "https://cistest.apis-it.hr:8449/FiskalizacijaServiceTest"; } else { cis.CisUrl = "https://cis.porezna-uprava.hr:8449/FiskalizacijaService"; } Raverus.FiskalizacijaDEV.PopratneFunkcije.Potpisivanje.PotpisiXmlDokument(dokument, certifikat); Raverus.FiskalizacijaDEV.PopratneFunkcije.XmlDokumenti.DodajSoapEnvelope(ref dokument); try { string vrsta = DT.Rows[i]["vrsta"].ToString().ToLower(); string godina = Convert.ToDateTime(DT.Rows[i]["date"].ToString()).Year.ToString(); string id = DT.Rows[i]["id"].ToString(); string broj = DT.Rows[i]["broj_racuna"].ToString(); string id_ducan = DT.Rows[i]["id_ducan"].ToString(); string id_kasa = DT.Rows[i]["id_kasa"].ToString(); XmlDocument odgovor = cis.PosaljiSoapPoruku(dokument); string jir = Raverus.FiskalizacijaDEV.PopratneFunkcije.XmlDokumenti.DohvatiJir(odgovor); provjera_sql(classSQL.delete("DELETE FROM neuspjela_fiskalizacija WHERE id='" + id + "'")); switch (vrsta) { case "račun": provjera_sql(classSQL.update("UPDATE racuni SET jir='" + jir + "' WHERE broj_racuna='" + broj + "' AND id_ducan=" + id_ducan + " AND id_kasa=" + id_kasa)); break; case "avans": provjera_sql(classSQL.update("UPDATE avansi SET jir='" + jir + "' WHERE broj_avansa='" + broj + "'")); //" AND godina_avansa ='" + godina + "'")); break; case "faktura": provjera_sql(classSQL.update("UPDATE fakture SET jir='" + jir + "' WHERE broj_fakture='" + broj + "'")); break; case "ifb": provjera_sql(classSQL.update("UPDATE ifb SET jir='" + jir + "' WHERE broj='" + broj + "'")); break; default: provjera_sql(classSQL.update("UPDATE racuni SET jir='" + jir + "' WHERE broj_racuna='" + broj + "' AND id_ducan=" + id_ducan + " AND id_kasa=" + id_kasa)); break; } } catch (Exception ex) { string greska; if (cis.OdgovorGreska != null) { greska = cis.OdgovorGreska.InnerXml.Replace("\'", ""); int x, y; x = greska.IndexOf("<tns:PorukaGreske>") + 18; y = greska.IndexOf("</tns:PorukaGreske>"); string porukaUseru = new string(greska.ToArray(), x, y - x); MessageBox.Show("Greška kod fiskalizacije\r\n\r\n" + porukaUseru.Replace("\"", "") + "\r\n\r\nPokušajte naknadno fiskalizirati", "Greška od strane FINE"); } else { greska = ex.ToString().Replace("\'", ""); MessageBox.Show("Greška kod fiskalizacije\r\n\r\n\r\nNije ostvarena veza sa poreznom upravom\r\n\r\nPokušajte naknadno fiskalizirati"); } } } Set(); }
private static void DoWork(string[] args, X509Certificate2 certifikat) { Raverus.FiskalizacijaDEV.PopratneFunkcije.TipDokumentaEnum tip = PopratneFunkcije.TipDokumentaEnum.Nepoznato; string tipDokumenta; string datoteka; string odgovorDatoteka; string logging; string url; bool bLogging; string snimanje; bool bSnimanje; bool bNemojPoslati = false; bool bNemojPotpisati = false; tipDokumenta = args[0]; url = args[1]; datoteka = args[2]; odgovorDatoteka = args[3]; logging = args[4]; snimanje = args[5]; if (string.IsNullOrEmpty(tipDokumenta)) { Console.WriteLine("Tip dokumenta mora biti postavljen."); return; } if (string.IsNullOrEmpty(datoteka)) { switch (tipDokumenta.ToUpper()) { case "RACUNZAHTJEV": case "RZ": datoteka = Properties.Settings.Default.RacunZahtjevDatoteka; odgovorDatoteka = Properties.Settings.Default.RacunOdgovorDatoteka; break; case "POSLOVNIPROSTORZAHTJEV": case "PPZ": datoteka = Properties.Settings.Default.PoslovniProstorZahtjevDatoteka; odgovorDatoteka = Properties.Settings.Default.PoslovniProstorOdgovorDatoteka; break; case "RACUNZAHTJEVPOTPISI": case "RZPOT": datoteka = Properties.Settings.Default.RacunZahtjevPotpisiDatoteka; odgovorDatoteka = Properties.Settings.Default.RacunOdgovorPotpisiDatoteka; break; case "RACUNZAHTJEVPOSALJI": case "RZPOS": datoteka = Properties.Settings.Default.RacunZahtjevPosaljiDatoteka; odgovorDatoteka = Properties.Settings.Default.RacunOdgovorPosaljiDatoteka; break; case "POSLOVNIPROSTORZAHTJEVPOTPISI": case "PPZPOT": datoteka = Properties.Settings.Default.PoslovniProstorZahtjevPotpisiDatoteka; odgovorDatoteka = Properties.Settings.Default.PoslovniProstorOdgovorPotpisiDatoteka; break; case "POSLOVNIPROSTORZAHTJEVPOSALJI": case "PPZPOS": datoteka = Properties.Settings.Default.PoslovniProstorZahtjevPosaljiDatoteka; odgovorDatoteka = Properties.Settings.Default.PoslovniProstorOdgovorPosaljiDatoteka; break; default: break; } } if (string.IsNullOrEmpty(datoteka)) { Console.WriteLine("Datoteka mora biti postavljena."); return; } if (string.IsNullOrEmpty(odgovorDatoteka)) { Console.WriteLine("Datoteka za odgovor mora biti postavljena."); return; } if (string.IsNullOrEmpty(logging)) { Console.WriteLine("Opcija za logging mora biti postavljena."); return; } bool bTest = Boolean.TryParse(logging, out bLogging); if (!bTest) { Console.WriteLine("Vrijednost za logging mora biti postavljena na 'true' ili 'false'."); return; } if (string.IsNullOrEmpty(snimanje)) { Console.WriteLine("Opcija za snimanje mora biti postavljena."); return; } bTest = Boolean.TryParse(snimanje, out bSnimanje); if (!bTest) { Console.WriteLine("Vrijednost za snimanje mora biti postavljena na 'true' ili 'false'."); return; } switch (tipDokumenta.ToUpper()) { case "RACUNZAHTJEV": case "RZ": tip = PopratneFunkcije.TipDokumentaEnum.RacunOdgovor; break; case "POSLOVNIPROSTORZAHTJEV": case "PPZ": tip = PopratneFunkcije.TipDokumentaEnum.PoslovniProstorOdgovor; break; case "RACUNZAHTJEVPOTPISI": case "RZPOT": bNemojPoslati = true; tip = PopratneFunkcije.TipDokumentaEnum.Nepoznato; break; case "RACUNZAHTJEVPOSALJI": case "RZPOS": bNemojPotpisati = true; tip = PopratneFunkcije.TipDokumentaEnum.RacunOdgovor; break; case "POSLOVNIPROSTORZAHTJEVPOTPISI": case "PPZPOT": bNemojPoslati = true; tip = PopratneFunkcije.TipDokumentaEnum.Nepoznato; break; case "POSLOVNIPROSTORZAHTJEVPOSALJI": case "PPZPOS": bNemojPotpisati = true; tip = PopratneFunkcije.TipDokumentaEnum.PoslovniProstorOdgovor; break; default: break; } FileInfo fi = new FileInfo(datoteka); if (!fi.Exists) { Console.WriteLine("Datoteka ne postoji."); if (bLogging) { DoLog(String.Format("Datoteka '{0}' ne postoji.", datoteka)); } return; } XmlDocument dokument = null; try { if (bLogging) { DoLog(String.Format("Učitavanje XML datoteke '{0}'.", datoteka)); } dokument = new XmlDocument(); dokument.Load(datoteka); if (bLogging) { DoLog(String.Format("XML datoteka '{0}' uspješno učitana.", datoteka)); } } catch (Exception ex) { Console.WriteLine(String.Format("Greška kod učitavanja XML datoteke: {0}", ex.Message)); if (bLogging) { DoLog(String.Format("Greška kod učitavanja XML datoteke: {0}", ex.Message)); } return; } if (dokument != null) { XmlDocument odgovor = null; Raverus.FiskalizacijaDEV.CentralniInformacijskiSustav cis = new CentralniInformacijskiSustav() { TimeOut = Properties.Settings.Default.TimeOut }; if (!string.IsNullOrEmpty(url)) { cis.CisUrl = url; } else { cis.CisUrl = Properties.Settings.Default.CisUrl; } try { if (bSnimanje) { cis.NazivAutoGeneriranje = true; cis.NazivMapeZahtjev = Path.Combine(Environment.CurrentDirectory, "Zahtjev"); cis.NazivMapeOdgovor = Path.Combine(Environment.CurrentDirectory, "Odgovor"); } if (!bNemojPotpisati) { if (bLogging) { DoLog(String.Format("Certifikat: {0}", certifikat.Subject)); } if (bLogging) { DoLog(String.Format("Potpisujem dokument: {0}", dokument.InnerXml)); } PopratneFunkcije.Potpisivanje.PotpisiXmlDokument(dokument, certifikat); if (bLogging) { DoLog(String.Format("Potpisani dokument: {0}", dokument.InnerXml)); } PopratneFunkcije.XmlDokumenti.DodajSoapEnvelope(ref dokument); } if (bLogging) { DoLog(String.Format("Šaljem dokument: {0}", dokument.InnerXml)); } if (!bNemojPoslati) { odgovor = cis.PosaljiSoapPoruku(dokument); } else { odgovor = dokument; } } catch (Exception ex) { Console.WriteLine(String.Format("Greška kod obrade i slanja dokumenta: {0}", ex.Message)); if (bLogging) { DoLog(String.Format("Greška kod obrade i slanja dokumenta: {0}", ex.Message)); } if (cis.OdgovorGreskaStatus.HasValue) { HandleResponseError(cis.OdgovorGreskaStatus.Value.ToString(), cis.OdgovorGreska); } } if (odgovor != null) { try { if (bLogging) { DoLog(String.Format("Odgovor: {0}", odgovor.InnerXml)); } if (bLogging) { DoLog(String.Format("Spremanje u XML datoteku '{0}'.", odgovorDatoteka)); } Raverus.FiskalizacijaDEV.PopratneFunkcije.XmlDokumenti.SnimiXmlDokumentDatoteka(odgovor, odgovorDatoteka); if (tip == PopratneFunkcije.TipDokumentaEnum.RacunOdgovor) { string uuid = Raverus.FiskalizacijaDEV.PopratneFunkcije.XmlDokumenti.DohvatiUuid(odgovor, tip); string jir = Raverus.FiskalizacijaDEV.PopratneFunkcije.XmlDokumenti.DohvatiJir(odgovor); WriteToFile(jirDatoteka, String.Format("{0};{1}", uuid, jir)); } if (bLogging) { DoLog(String.Format("Odgovor je spremljen u XML datoteku '{0}'.", odgovorDatoteka)); } Console.WriteLine("Status OK"); if (bLogging) { DoLog("Status OK"); } } catch (Exception ex) { WriteToFile(jirDatoteka, ""); Console.WriteLine(String.Format("Greška kod snimanja odgovora u datoteku: {0}", ex.Message)); if (bLogging) { DoLog(String.Format("Greška kod snimanja odgovora u datoteku: {0}", ex.Message)); } } } } }
public static string[] Fiskalizacija(string oib, string oib_operatera, DataTable DTartikli, DateTime datum_racuna, bool sustavPDV, int broj_rac, string prodajnoMJ, int broj_kase, DataTable DTpdv, string[] porez_na_potrosnju, DataTable DTostali_porezi, string iznososlobpdv, string iznos_marza, DataTable DTnaknade, decimal ukupno, string nacin_placanja, bool naknadno_poslano, double osnovica) { sifra_prodajnog_mjesta = prodajnoMJ; DataTable DTdd = classSQL.select("SELECT ime_ducana FROM ducan WHERE id_ducan='" + prodajnoMJ + "'", "ducan").Tables[0]; if (DTdd.Rows.Count > 0) { prodajnoMJ = DTdd.Rows[0][0].ToString(); } string ZkiGotov = ""; string[] za_vratiti = new string[3]; try { Raverus.FiskalizacijaDEV.Schema.ZaglavljeType zaglavlje = new Raverus.FiskalizacijaDEV.Schema.ZaglavljeType() { DatumVrijeme = Razno.DohvatiFormatiranoTrenutnoDatumVrijeme(), IdPoruke = Guid.NewGuid().ToString() }; osnovica_sve = osnovica; X509Certificate2 certifikat; if (File.Exists(DTpostavke.Rows[0]["putanja_certifikat"].ToString())) { certifikat = Raverus.FiskalizacijaDEV.PopratneFunkcije.Potpisivanje.DohvatiCertifikat(DTpostavke.Rows[0]["putanja_certifikat"].ToString(), DTpostavke.Rows[0]["certifikat_zaporka"].ToString()); } else { certifikat = Raverus.FiskalizacijaDEV.PopratneFunkcije.Potpisivanje.DohvatiCertifikat(DTfis.Rows[0]["naziv_certifikata"].ToString()); } if (certifikat == null) { MessageBox.Show("Nije pravilno instalirani certifikat.", "Greška"); return(za_vratiti); } string datum_vrijeme = DateTime.Now.ToString("dd.MM.yyyyTHH:mm:ss"); ZkiGotov = ZKI(certifikat, oib, datum_vrijeme, broj_rac.ToString(), prodajnoMJ, broj_kase.ToString(), ukupno.ToString("#0.00").Replace(",", ".")); xml = @"<?xml version=""1.0"" encoding=""utf-8""?>" + @"<tns:RacunZahtjev xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" Id=""signXmlId"" xmlns:tns=""http://www.apis-it.hr/fin/2012/types/f73"">" + @"<tns:Zaglavlje>" + @"<tns:IdPoruke>" + zaglavlje.IdPoruke + "</tns:IdPoruke>" + @"<tns:DatumVrijeme>" + datum_vrijeme + "</tns:DatumVrijeme>" + @"</tns:Zaglavlje>" + @"<tns:Racun>" + @"<tns:Oib>" + oib + "</tns:Oib>" + @"<tns:USustPdv>" + sustavPDV.ToString().ToLower() + "</tns:USustPdv>" + @"<tns:DatVrijeme>" + datum_racuna.ToString("dd.MM.yyyyTHH:mm:ss") + "</tns:DatVrijeme>" + @"<tns:OznSlijed>" + DTfis.Rows[0]["oznaka_slijednosti"].ToString() + "</tns:OznSlijed>" + @"<tns:BrRac>" + @"<tns:BrOznRac>" + broj_rac + "</tns:BrOznRac>" + @"<tns:OznPosPr>" + prodajnoMJ + "</tns:OznPosPr>" + @"<tns:OznNapUr>" + broj_kase + "</tns:OznNapUr>" + @"</tns:BrRac>" + PDVreturn(DTpdv, sustavPDV.ToString().ToLower()) + PorezNaPotrosnju(porez_na_potrosnju) + OstaliPorezi(DTostali_porezi) + IznosOslobPdv(iznososlobpdv) + IznosMarza(iznos_marza) + Naknade(DTnaknade) + @"<tns:IznosUkupno>" + ukupno.ToString("#0.00").Replace(",", ".") + "</tns:IznosUkupno>" + @"<tns:NacinPlac>" + nacin_placanja + "</tns:NacinPlac>" + @"<tns:OibOper>" + oib_operatera + "</tns:OibOper>" + @"<tns:ZastKod>" + ZkiGotov + "</tns:ZastKod>" + @"<tns:NakDost>" + naknadno_poslano.ToString().ToLower() + "</tns:NakDost>" + @"</tns:Racun>" + @"</tns:RacunZahtjev>"; XmlDocument dokument = new XmlDocument(); dokument.LoadXml(xml); try { string path = System.Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); if (!Directory.Exists(path + "/FiskalniXML")) { Directory.CreateDirectory(path + "/FiskalniXML"); } dokument.Save(path + "/FiskalniXML/" + Util.Korisno.GodinaKojaSeKoristiUbazi + "-" + broj_rac + "-" + prodajnoMJ + "-" + broj_kase + ".xml"); } catch { } Raverus.FiskalizacijaDEV.CentralniInformacijskiSustav cis = new CentralniInformacijskiSustav(); if (Class.Postavke.TEST_FISKALIZACIJA) { cis.CisUrl = "https://cistest.apis-it.hr:8449/FiskalizacijaServiceTest"; } else { cis.CisUrl = "https://cis.porezna-uprava.hr:8449/FiskalizacijaService"; } Raverus.FiskalizacijaDEV.PopratneFunkcije.Potpisivanje.PotpisiXmlDokument(dokument, certifikat); Raverus.FiskalizacijaDEV.PopratneFunkcije.XmlDokumenti.DodajSoapEnvelope(ref dokument); try { cis.TimeOut = 8000; XmlDocument odgovor = null; try { odgovor = cis.PosaljiSoapPoruku(dokument); } catch { } if (odgovor != null) { string jir = Raverus.FiskalizacijaDEV.PopratneFunkcije.XmlDokumenti.DohvatiJir(odgovor); za_vratiti[0] = jir; za_vratiti[1] = ZkiGotov; za_vratiti[2] = zaglavlje.IdPoruke; return(za_vratiti); } else { za_vratiti[0] = ""; za_vratiti[1] = ZkiGotov; za_vratiti[2] = zaglavlje.IdPoruke; string gr = cis.OdgovorGreska == null ? "" : cis.OdgovorGreska.ToString(); InsertNeuspjelaFis(broj_rac.ToString(), gr, sifra_prodajnog_mjesta, broj_kase.ToString(), oib_operatera, ukupno.ToString("#0.00").Replace(",", ".")); return(za_vratiti); } } catch (Exception ex) { za_vratiti[0] = ""; za_vratiti[1] = ZkiGotov; za_vratiti[2] = zaglavlje.IdPoruke; string greska; if (cis.OdgovorGreska != null) { greska = cis.OdgovorGreska.InnerXml.Replace("\'", ""); InsertNeuspjelaFis(broj_rac.ToString(), greska.Replace("\"", ""), sifra_prodajnog_mjesta, broj_kase.ToString(), oib_operatera, ukupno.ToString("#0.00").Replace(",", ".")); MessageBox.Show("Greška kod fiskalizacije\r\n\r\n\r\n" + greska.Replace("\"", "") + "\r\n\r\n\r\n\r\n\r\n", "Greška od strane FINE"); } else { greska = ex.ToString().Replace("\'", ""); InsertNeuspjelaFis(broj_rac.ToString(), greska, sifra_prodajnog_mjesta, broj_kase.ToString(), oib_operatera, ukupno.ToString("#0.00").Replace(",", ".")); MessageBox.Show("Greška kod fiskalizacije\r\n\r\n\r\n" + greska.Replace("\"", "")); } za_vratiti[1] = ZkiGotov; return(za_vratiti); } } catch { za_vratiti[0] = ""; za_vratiti[1] = ZkiGotov; za_vratiti[2] = ""; return(za_vratiti); } }
public static string[] Fiskalizacija(string oib, string oib_operatera, DataTable DTartikli, DateTime datum_racuna, bool sustavPDV, int broj_rac, string prodajnoMJ, int broj_kase, DataTable DTpdv, string[] porez_na_potrosnju, DataTable DTostali_porezi, string iznososlobpdv, string iznos_marza, DataTable DTnaknade, decimal ukupno, string nacin_placanja, bool naknadno_poslano) { string[] za_vratiti = new string[3]; Raverus.FiskalizacijaDEV.Schema.ZaglavljeType zaglavlje = new Raverus.FiskalizacijaDEV.Schema.ZaglavljeType() { DatumVrijeme = Razno.DohvatiFormatiranoTrenutnoDatumVrijeme(), IdPoruke = Guid.NewGuid().ToString() }; X509Certificate2 certifikat = Raverus.FiskalizacijaDEV.PopratneFunkcije.Potpisivanje.DohvatiCertifikat(DTfis.Rows[0]["naziv_certifikata"].ToString()); string datum_vrijeme = DateTime.Now.ToString("dd.MM.yyyyThh:mm:ss"); string ZkiGotov = ZKI(certifikat, oib, datum_vrijeme, broj_rac.ToString(), prodajnoMJ, broj_kase.ToString(), ukupno.ToString("#0.00").Replace(",", ".")); string xml = @"<?xml version=""1.0"" encoding=""utf-8""?>" + @"<tns:RacunZahtjev xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" Id=""signXmlId"" xmlns:tns=""http://www.apis-it.hr/fin/2012/types/f73"">" + @"<tns:Zaglavlje>" + @"<tns:IdPoruke>" + zaglavlje.IdPoruke + "</tns:IdPoruke>" + @"<tns:DatumVrijeme>" + datum_vrijeme + "</tns:DatumVrijeme>" + @"</tns:Zaglavlje>" + @"<tns:Racun>" + @"<tns:Oib>" + oib + "</tns:Oib>" + @"<tns:USustPdv>" + sustavPDV.ToString().ToLower() + "</tns:USustPdv>" + @"<tns:DatVrijeme>" + datum_racuna.ToString("dd.MM.yyyyThh:mm:ss") + "</tns:DatVrijeme>" + @"<tns:OznSlijed>" + DTfis.Rows[0]["oznaka_slijednosti"].ToString() + "</tns:OznSlijed>" + @"<tns:BrRac>" + @"<tns:BrOznRac>" + broj_rac + "</tns:BrOznRac>" + @"<tns:OznPosPr>" + prodajnoMJ + "</tns:OznPosPr>" + @"<tns:OznNapUr>" + broj_kase + "</tns:OznNapUr>" + @"</tns:BrRac>" + PDVreturn(DTpdv) + PorezNaPotrosnju(porez_na_potrosnju) + OstaliPorezi(DTostali_porezi) + IznosOslobPdv(iznososlobpdv) + IznosMarza(iznos_marza) + Naknade(DTnaknade) + @"<tns:IznosUkupno>" + ukupno.ToString("#0.00").Replace(",", ".") + "</tns:IznosUkupno>" + @"<tns:NacinPlac>" + nacin_placanja + "</tns:NacinPlac>" + @"<tns:OibOper>" + oib_operatera + "</tns:OibOper>" + @"<tns:ZastKod>" + ZkiGotov + "</tns:ZastKod>" + @"<tns:NakDost>" + naknadno_poslano.ToString().ToLower() + "</tns:NakDost>" + @"</tns:Racun>" + @"</tns:RacunZahtjev>"; XmlDocument dokument = new XmlDocument(); dokument.LoadXml(xml); Raverus.FiskalizacijaDEV.CentralniInformacijskiSustav cis = new CentralniInformacijskiSustav(); Raverus.FiskalizacijaDEV.PopratneFunkcije.Potpisivanje.PotpisiXmlDokument(dokument, certifikat); Raverus.FiskalizacijaDEV.PopratneFunkcije.XmlDokumenti.DodajSoapEnvelope(ref dokument); //XmlNode node = dokument.SelectSingleNode("Root/Node/Element"); //node.Attributes[0].Value = "true"; //string s = node.Attributes[0].ToString(); dokument.Save("d:/fiskalizacija" + broj_rac + ".xml"); try { XmlDocument odgovor = cis.PosaljiSoapPoruku(dokument); if (odgovor != null) { string jir = Raverus.FiskalizacijaDEV.PopratneFunkcije.XmlDokumenti.DohvatiJir(odgovor); za_vratiti[0] = jir; za_vratiti[1] = ZkiGotov; za_vratiti[1] = zaglavlje.IdPoruke; return(za_vratiti); } else { za_vratiti[1] = ZkiGotov; return(za_vratiti); } } catch (Exception ex) { if (cis.OdgovorGreska != null) { XmlNamespaceManager xmlnsManager = new XmlNamespaceManager(dokument.NameTable); xmlnsManager.AddNamespace("tns", "http://www.apis-it.hr/fin/2012/types/f73"); xmlnsManager.AddNamespace("s", "http://schemas.xmlsoap.org/soap/envelope/"); string Severity = dokument.SelectSingleNode("s:Envelope/s:Body/tns:RacunZahtjev/tns:Racun/tns:NakDost", xmlnsManager).ChildNodes[0].Value = "true"; dokument.Save("Fiskalizacija/_" + broj_rac.ToString() + ".xml"); MessageBox.Show(cis.OdgovorGreska.InnerXml); za_vratiti[1] = ZkiGotov; return(za_vratiti); } else { MessageBox.Show(string.Format("Greska: {0}", ex.Message)); } za_vratiti[1] = ZkiGotov; return(za_vratiti); } }
public static string[] Fiskalizacija(string oib, string oib_operatera, DateTime datum_racuna, bool sustavPDV, int broj_rac, DataTable DTpdv, string[] porez_na_potrosnju, DataTable DTostali_porezi, string iznososlobpdv, string iznos_marza, DataTable DTnaknade, decimal ukupno, string nacin_placanja, bool naknadno_poslano, string vrstaUredjaja ) { string ZkiGotov = ""; string[] za_vratiti = new string[3]; try { Raverus.FiskalizacijaDEV.Schema.ZaglavljeType zaglavlje = new Raverus.FiskalizacijaDEV.Schema.ZaglavljeType() { DatumVrijeme = datum_racuna.ToString("dd.MM.yyyyTHH:mm:ss"), IdPoruke = Guid.NewGuid().ToString() }; string nazivCertifikata, oznaka_slijednosti; DataTable dt = classSQL.select_settings("SELECT naziv_certifikata, oznaka_slijednosti FROM fiskalizacija", "fiskalizacija").Tables[0]; nazivCertifikata = dt.Rows.Count > 0 ? dt.Rows[0][0].ToString() : ""; oznaka_slijednosti = dt.Rows.Count > 0 ? dt.Rows[0][1].ToString() : ""; dt = classSQL.select_settings("SELECT * FROM postavke", "postavke").Tables[0]; switch (vrstaUredjaja.ToLower()) { case "faktura": broj_kase = dt.Rows.Count > 0 ? dt.Rows[0]["naplatni_uredaj_faktura"].ToString() : broj_kase; break; case "avans": broj_kase = dt.Rows.Count > 0 ? dt.Rows[0]["naplatni_uredaj_avans"].ToString() : broj_kase; break; case "ifb": broj_kase = dt.Rows.Count > 0 ? dt.Rows[0]["naplatni_uredaj_faktura_bez_robe"].ToString() : broj_kase; break; case "račun": broj_kase = dt.Rows.Count > 0 ? dt.Rows[0]["default_blagajna"].ToString() : broj_kase; break; //po defaultu šalje ko račun default: broj_kase = dt.Rows.Count > 0 ? dt.Rows[0]["default_blagajna"].ToString() : broj_kase; break; } dt = classSQL.select("SELECT ime_ducana FROM ducan WHERE id_ducan = '" + Class.Postavke.id_default_ducan + "'", "ducan").Tables[0]; prodajnoMJ = dt.Rows.Count > 0 ? dt.Rows[0][0].ToString() : prodajnoMJ; //X509Certificate2 certifikat = Raverus.FiskalizacijaDEV.PopratneFunkcije.Potpisivanje.DohvatiCertifikat(nazivCertifikata); X509Certificate2 certifikat; if (File.Exists(Class.Postavke.putanja_certifikat)) { certifikat = Raverus.FiskalizacijaDEV.PopratneFunkcije.Potpisivanje.DohvatiCertifikat(Class.Postavke.putanja_certifikat, Class.Postavke.certifikat_zaporka); } else { certifikat = Raverus.FiskalizacijaDEV.PopratneFunkcije.Potpisivanje.DohvatiCertifikat(DTfis.Rows[0]["naziv_certifikata"].ToString()); } if (certifikat == null) { InsertNeuspjelaFis(broj_rac.ToString(), "Nema certifikata", prodajnoMJ.ToString(), broj_kase.ToString(), oib_operatera, ukupno.ToString("#0.00").Replace(",", "."), vrstaUredjaja); za_vratiti[0] = ""; za_vratiti[1] = ""; za_vratiti[2] = ""; MessageBox.Show("Nije pravilno instalirani certifikat.", "Greška"); return(za_vratiti); } string datum_vrijeme = datum_racuna.ToString("dd.MM.yyyyTHH:mm:ss"); ZkiGotov = ZKI(certifikat, oib, datum_vrijeme, broj_rac.ToString(), prodajnoMJ, broj_kase.ToString(), ukupno.ToString("#0.00").Replace(",", ".")); xml = @"<?xml version=""1.0"" encoding=""utf-8""?>" + @"<tns:RacunZahtjev xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" Id=""signXmlId"" xmlns:tns=""http://www.apis-it.hr/fin/2012/types/f73"">" + @"<tns:Zaglavlje>" + @"<tns:IdPoruke>" + zaglavlje.IdPoruke + "</tns:IdPoruke>" + @"<tns:DatumVrijeme>" + datum_vrijeme + "</tns:DatumVrijeme>" + @"</tns:Zaglavlje>" + @"<tns:Racun>" + @"<tns:Oib>" + oib + "</tns:Oib>" + @"<tns:USustPdv>" + sustavPDV.ToString().ToLower() + "</tns:USustPdv>" + @"<tns:DatVrijeme>" + datum_racuna.ToString("dd.MM.yyyyTHH:mm:ss") + "</tns:DatVrijeme>" + @"<tns:OznSlijed>" + oznaka_slijednosti + "</tns:OznSlijed>" + @"<tns:BrRac>" + @"<tns:BrOznRac>" + broj_rac + "</tns:BrOznRac>" + @"<tns:OznPosPr>" + prodajnoMJ + "</tns:OznPosPr>" + @"<tns:OznNapUr>" + broj_kase + "</tns:OznNapUr>" + @"</tns:BrRac>" + PDVreturn(DTpdv, sustavPDV.ToString().ToLower()) + PorezNaPotrosnju(porez_na_potrosnju) + OstaliPorezi(DTostali_porezi) + IznosOslobPdv(iznososlobpdv) + IznosMarza(iznos_marza) + Naknade(DTnaknade) + @"<tns:IznosUkupno>" + ukupno.ToString("#0.00").Replace(",", ".") + "</tns:IznosUkupno>" + @"<tns:NacinPlac>" + nacin_placanja + "</tns:NacinPlac>" + @"<tns:OibOper>" + oib_operatera + "</tns:OibOper>" + @"<tns:ZastKod>" + ZkiGotov + "</tns:ZastKod>" + @"<tns:NakDost>" + naknadno_poslano.ToString().ToLower() + "</tns:NakDost>" + @"</tns:Racun>" + @"</tns:RacunZahtjev>"; XmlDocument dokument = new XmlDocument(); dokument.LoadXml(xml); try { string path = System.Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); if (!Directory.Exists(path + "/FiskalniXMLPCPOS")) { Directory.CreateDirectory(path + "/FiskalniXMLPCPOS"); } int god = Util.Korisno.GodinaKojaSeKoristiUbazi; string naziv = god.ToString() + "-" + broj_rac + "-" + prodajnoMJ + "-" + broj_kase + ".xml"; dokument.Save(path + "/FiskalniXMLPCPOS/" + naziv); } catch { } Raverus.FiskalizacijaDEV.CentralniInformacijskiSustav cis = new CentralniInformacijskiSustav(); //testYes = File.Exists("FiskalTest") ? "1" : "0"; if (Class.Postavke.TEST_FISKALIZACIJA) { cis.CisUrl = "https://cistest.apis-it.hr:8449/FiskalizacijaServiceTest"; } else { cis.CisUrl = "https://cis.porezna-uprava.hr:8449/FiskalizacijaService"; } Raverus.FiskalizacijaDEV.PopratneFunkcije.Potpisivanje.PotpisiXmlDokument(dokument, certifikat); Raverus.FiskalizacijaDEV.PopratneFunkcije.XmlDokumenti.DodajSoapEnvelope(ref dokument); //XmlNode node = dokument.SelectSingleNode("Root/Node/Element"); //node.Attributes[0].Value = "true"; //string s = node.Attributes[0].ToString(); //if (!Util.CheckConnection.Check()) //{ // MessageBox.Show("Niste spojeni na Internet! Dokument se neće fiskalizirati!", "Upozorenje!"); // //return; //} try { cis.TimeOut = 10000; XmlDocument odgovor = cis.PosaljiSoapPoruku(dokument); if (odgovor != null) { string jir = Raverus.FiskalizacijaDEV.PopratneFunkcije.XmlDokumenti.DohvatiJir(odgovor); za_vratiti[0] = jir; za_vratiti[1] = ZkiGotov; za_vratiti[2] = zaglavlje.IdPoruke; return(za_vratiti); } else { za_vratiti[0] = ""; za_vratiti[1] = ZkiGotov; za_vratiti[2] = zaglavlje.IdPoruke; string gr = cis.OdgovorGreska == null ? "" : cis.OdgovorGreska.ToString(); InsertNeuspjelaFis(broj_rac.ToString(), gr, prodajnoMJ.ToString(), broj_kase.ToString(), oib_operatera, ukupno.ToString("#0.00").Replace(",", "."), vrstaUredjaja); return(za_vratiti); } } catch (Exception ex) { za_vratiti[0] = ""; za_vratiti[1] = ZkiGotov; za_vratiti[2] = zaglavlje.IdPoruke; string greska; if (cis.OdgovorGreska != null) { greska = cis.OdgovorGreska.InnerXml.Replace("\'", ""); int x, y; x = greska.IndexOf("<tns:PorukaGreske>") + 18; y = greska.IndexOf("</tns:PorukaGreske>"); string porukaUseru = new string(greska.ToArray(), x, y - x); InsertNeuspjelaFis(broj_rac.ToString(), greska.Replace("\"", ""), prodajnoMJ.ToString(), broj_kase.ToString(), oib_operatera, ukupno.ToString("#0.00").Replace(",", "."), vrstaUredjaja); MessageBox.Show("Greška kod fiskalizacije\r\n\r\n" + porukaUseru.Replace("\"", "") + "\r\n\r\nPokušajte naknadno fiskalizirati\r\nMaloprodaja -> Neuspjele transakcije fiskalizacije", "Greška od strane FINE"); } else { greska = ex.ToString().Replace("\'", ""); InsertNeuspjelaFis(broj_rac.ToString(), greska, prodajnoMJ.ToString(), broj_kase.ToString(), oib_operatera, ukupno.ToString("#0.00").Replace(",", "."), vrstaUredjaja); MessageBox.Show("Greška kod fiskalizacije\r\n\r\n\r\nNije ostvarena veza sa poreznom upravom\r\n\r\nPokušajte naknadno fiskalizirati\r\nMaloprodaja -> Neuspjele transakcije fiskalizacije"); } za_vratiti[1] = ZkiGotov; return(za_vratiti); } } catch (Exception ex) { MessageBox.Show(ex.ToString()); za_vratiti[0] = ""; za_vratiti[1] = ZkiGotov; za_vratiti[2] = ""; return(za_vratiti); } }