private void SendCheck(Fiskalizator fiskalizator, List <string> inputParameters) { try { if (inputParameters.Count != 23) { WriteToFile(new[] { "FALSE", "Input file parameter count missmatch." }); throw new MyExitException(); } RacunType invoice; string[] certificateParams; Util.ParseInvoiceInput(inputParameters, out invoice, out certificateParams); if (certificateParams == null || !(certificateParams.Length == 1 || certificateParams.Length == 2)) { WriteToFile(new[] { "FALSE", "Certificate definition error" }); throw new MyExitException(); } XmlDocument reply; try { if (_settings.WriteDebugToLog) { WriteToLog("Prepared to send invoice."); } reply = (certificateParams.Length == 1 ? fiskalizator.SendCheck(invoice, certificateParams[0]) : fiskalizator.SendCheck(invoice, certificateParams[0], certificateParams[1])); if (_settings.WriteDebugToLog) { WriteToLog("Invoice sent and reply recieved."); } if (_settings.WriteDebugToLog) { WriteToLog("Sucessful reply - starting to write output.out [Line 707]"); } var tekstGresaka = (string)null; var doc = XDocument.Load(new XmlNodeReader(reply)); var greskeNode = doc.Elements().First() .Elements().First() .Elements().First() .Elements().SingleOrDefault(x => x.Name.ToString().EndsWith("Greske")); if (greskeNode != null) { tekstGresaka = greskeNode.Elements() .Select(x => string.Format("{0} {1}", x.Elements().Single(y => y.Name.ToString().EndsWith("SifraGreske")).Value, x.Elements().Single(y => y.Name.ToString().EndsWith("PorukaGreske")).Value)) .Aggregate((x, y) => x + Environment.NewLine + y); } WriteToFile((tekstGresaka != null ? new[] { "FALSE", tekstGresaka, (fiskalizator.LastMessageTimeStamps != null ? String.Format("Komunikacija: {0} - {1} ({2})", fiskalizator.LastMessageTimeStamps[0], fiskalizator.LastMessageTimeStamps[1], fiskalizator.LastMessageTimeStamps[1] - fiskalizator.LastMessageTimeStamps[0]) : "") } : new[] { "TRUE", (fiskalizator.LastMessageTimeStamps != null ? String.Format("Komunikacija: {0} - {1} ({2})", fiskalizator.LastMessageTimeStamps[0], fiskalizator.LastMessageTimeStamps[1], fiskalizator.LastMessageTimeStamps[1] - fiskalizator.LastMessageTimeStamps[0]) : "") })); } catch (ServerException sex) { if (_settings.WriteDebugToLog) { WriteToLog("Recieved ServerException - message parsing started [Line 681]"); } reply = fiskalizator.CisErrorReply; var lines = new List <string> { "FALSE", invoice.ZastKod }; if (fiskalizator.CisExceptionStatus != null) { lines.Add("Server exception: " + fiskalizator.CisExceptionStatus); } try { var error = Fiskalizator.GetErrorCodeAndMessage(reply, MessageType.Invoice_From_CIS); lines.Add("Server error: " + error[0] + ' ' + error[1]); } catch (Exception ex) { if (_settings.WriteDebugToLog) { WriteToLog(GenerateExceptionMessages(sex, 670)); WriteToLog(GenerateExceptionMessages(ex, 683)); } } lines.Add(String.Format("{0} {1}", sex.Message, (sex.InnerException != null ? sex.InnerException.Message : ""))); if (_settings.WriteDebugToLog) { WriteToLog("ServerException sucessfuly parsed - starting to write output.out [Line 702]"); } WriteToFile(lines.ToArray()); throw new MyExitException(); } } catch (MyExitException) { throw new MyExitException(); } catch (Exception ex) { if (_settings.WriteDebugToLog) { WriteToLog("Exception in SendInvoice. See next entry for exception details."); WriteToLog(GenerateExceptionMessages(ex, 714)); } WriteToFile(new[] { "FALSE", ex.Message, (ex.InnerException != null ? ex.InnerException.Message : "") }); } }
private static void SendCheck(Fiskalizator fiskalizator, Settings settings) { try { var parameters = new List <string>(Util.ReadFromFile(settings.InputFile).Split('|')); if (parameters.Count != 23) { WriteToFile(settings, new[] { "FALSE", "Input file parameter count missmatch." }); throw new MyExitException(); } RacunType invoice; string[] certificateParams; Util.ParseInvoiceInput(parameters, out invoice, out certificateParams); if (certificateParams == null || !(certificateParams.Length == 1 || certificateParams.Length == 2)) { WriteToFile(settings, new[] { "FALSE", "Certificate definition error" }); throw new MyExitException(); } XmlDocument reply; try { reply = (certificateParams.Length == 1 ? fiskalizator.SendCheck(invoice, certificateParams[0]) : fiskalizator.SendCheck(invoice, certificateParams[0], certificateParams[1])); var tekstGresaka = (string)null; var doc = XDocument.Load(new XmlNodeReader(reply)); var greskeNode = doc.Elements().First() .Elements().First() .Elements().First() .Elements().SingleOrDefault(x => x.Name.ToString().EndsWith("Greske")); if (greskeNode != null) { tekstGresaka = greskeNode.Elements() .Select(x => string.Format("{0} {1}", x.Elements().Single(y => y.Name.ToString().EndsWith("SifraGreske")).Value, x.Elements().Single(y => y.Name.ToString().EndsWith("PorukaGreske")).Value)) .Aggregate((x, y) => x + Environment.NewLine + y); } WriteToFile(settings, (tekstGresaka != null ? new[] { "FALSE", tekstGresaka } : new[] { "TRUE" })); } catch (ServerException sex) { reply = fiskalizator.CisErrorReply; var lines = new List <string> { "FALSE", invoice.ZastKod }; if (fiskalizator.CisExceptionStatus != null) { lines.Add("Server exception: " + fiskalizator.CisExceptionStatus); } try { var error = Fiskalizator.GetErrorCodeAndMessage(reply, MessageType.Invoice_From_CIS); lines.Add("Server error(s): " + error.Aggregate((x, y) => x + " " + y)); } catch { } lines.Add(String.Format("{0} {1}", sex.Message, (sex.InnerException != null ? sex.InnerException.Message : ""))); WriteToFile(settings, lines.ToArray()); throw new MyExitException(); } } catch (MyExitException) { throw new MyExitException(); } catch (Exception ex) { WriteToFile(settings, new[] { "FALSE", ex.Message, (ex.InnerException != null ? ex.InnerException.Message : "") }); } }