Пример #1
0
        public Message NewMessage(int sequence, long applicationEntityId, IRqMsg rqMsg)
        {
            Message message = new Message(sequence, applicationEntityId, rqMsg);

            _messages.Add(message);
            return(message);
        }
Пример #2
0
 public Message(int sequence, long applicationEntityId, IRqMsg rqMsg)
 {
     Sequence            = sequence;
     ApplicationEntityId = applicationEntityId;
     RequestDate         = DateTime.Now;
     RqMsg     = rqMsg;
     RequestId = rqMsg.requestID;
 }
Пример #3
0
        internal static void Request(DbContext db, EfParaquickMessage efMessage, IRqMsg rqMsg)
        {
            //re-serialize
            efMessage.RequestXml = rqMsg.Serialize();

            //truncate
            TruncateMessage(efMessage);

            //save
            db.SaveChanges();
        }
Пример #4
0
 protected virtual string OnRequest(DbContext db, EfParaquickMessage efMessage, IRqMsg rqMsg)
 {
     //nothing wrong, proceed
     return(null);
 }
Пример #5
0
        protected override string OnCreateRequestMessage(string ticket, string hcpXml, string companyFilePath, string qbCountry, int qbMajorVersion, int qbMinorVersion)
        {
            //zerotickets should never be seen here, but if so, they will recur in getLastError and be logged there
            if (ticket != ServiceUtils.ZeroTicket)
            {
                using (var db = ServiceUtils.CreateDbContext())
                {
                    EfParaquickSession efSession = ServiceUtils.FindSession(db, ticket);

                    //bad tickets will recur in getLastError and be logged there
                    if (efSession != null)
                    {
                        //confirm file path
                        if (IsCompanyFileValid(db, efSession, companyFilePath))
                        {
                            //save the hcpXml & other information in the company record
                            if (!string.IsNullOrEmpty(hcpXml))
                            {
                                ServiceUtils.Session(db, efSession, hcpXml, qbCountry, qbMajorVersion, qbMinorVersion);
                            }

                            //find next message for this ticket
                            List <EfParaquickMessage> efMessages = ServiceUtils.FindNextMessageSet(db, efSession);

                            if (efMessages != null)
                            {
                                //TODO do we set OnError to stopOnErrors in the request?
                                RqMsgSet rqMsgSet = new RqMsgSet();

                                foreach (var efMessage in efMessages)
                                {
                                    //deserialize request message
                                    IRqMsg rqMsg = (IRqMsg)Msg.Deserialize(efMessage.MessageType.RequestTypeName, efMessage.RequestXml);

                                    //allow implementation to see/modify message
                                    string errorMessage = OnRequest(db, efMessage, rqMsg);
                                    if (errorMessage == null)
                                    {
                                        //add it to message set
                                        rqMsgSet.Add(rqMsg);
                                    }
                                    else
                                    {
                                        //"close" this request, don't send to WC
                                        RequestError(db, efSession, efMessage, errorMessage);
                                    }
                                }

                                //TODO is "nothing to do" at this point an error?

                                //send it
                                string xml = rqMsgSet.Serialize();
                                return(xml);
                            }
                            else
                            {
                                //something wrong with the message set in the database, log it
                                SessionError(db, efSession, $"An error occurred when building the message set for session ({efSession.Id})");

                                //this is pretty bad, let's just close the session
                                ServiceUtils.Close(db, efSession);
                            }
                        }
                        else
                        {
                            //log error
                            SessionError(db, efSession, $"Incorrect company file ({companyFilePath}) for company ({efSession.CompanyId})");
                        }
                    }
                }
            }

            //error condition
            return("");
        }