private void PublishNext()
        {
            List <YellowstonePathology.Business.Test.PanelSetOrderView> caseList = YellowstonePathology.Business.Gateway.AccessionOrderGateway.GetNextCasesToPublish();

            int maxProcessCount = 2;

            if (caseList.Count >= 10)
            {
                maxProcessCount = 10;
            }

            int processCount = 0;

            foreach (YellowstonePathology.Business.Test.PanelSetOrderView view in caseList)
            {
                YellowstonePathology.Business.Test.AccessionOrder accessionOrder = YellowstonePathology.Business.Persistence.DocumentGateway.Instance.PullAccessionOrder(view.MasterAccessionNo, this);
                YellowstonePathology.Business.Test.PanelSetOrder  panelSetOrder  = accessionOrder.PanelSetOrderCollection.GetPanelSetOrder(view.ReportNo);

                if (panelSetOrder.PanelSetId == 116)
                {
                    this.HandleWHP(accessionOrder, panelSetOrder);
                }

                YellowstonePathology.Business.PanelSet.Model.PanelSetCollection panelSetCollection = YellowstonePathology.Business.PanelSet.Model.PanelSetCollection.GetAll();
                YellowstonePathology.Business.PanelSet.Model.PanelSet           panelSet           = panelSetCollection.GetPanelSet(panelSetOrder.PanelSetId);

                YellowstonePathology.Business.Interface.ICaseDocument caseDocument  = YellowstonePathology.Business.Document.DocumentFactory.GetDocument(accessionOrder, panelSetOrder, Business.Document.ReportSaveModeEnum.Normal);
                YellowstonePathology.Business.OrderIdParser           orderIdParser = new YellowstonePathology.Business.OrderIdParser(panelSetOrder.ReportNo);

                if (panelSetOrder.HoldDistribution == false)
                {
                    if (this.TryDelete(panelSetOrder, caseDocument, orderIdParser) == true)
                    {
                        if (this.TryPublish(caseDocument, accessionOrder, panelSetOrder) == true)
                        {
                            if (panelSetOrder.Distribute == true)
                            {
                                foreach (YellowstonePathology.Business.ReportDistribution.Model.TestOrderReportDistribution testOrderReportDistribution in panelSetOrder.TestOrderReportDistributionCollection)
                                {
                                    if (testOrderReportDistribution.Distributed == false)
                                    {
                                        YellowstonePathology.Business.ReportDistribution.Model.DistributionResult distributionResult = this.Distribute(testOrderReportDistribution, accessionOrder, panelSetOrder);
                                        if (distributionResult.IsComplete == true)
                                        {
                                            testOrderReportDistribution.TimeOfLastDistribution    = DateTime.Now;
                                            testOrderReportDistribution.ScheduledDistributionTime = null;
                                            testOrderReportDistribution.Distributed = true;

                                            string testOrderReportDistributionLogId = Guid.NewGuid().ToString();
                                            string objectId = MongoDB.Bson.ObjectId.GenerateNewId().ToString();
                                            YellowstonePathology.Business.ReportDistribution.Model.TestOrderReportDistributionLog testOrderReportDistributionLog = new YellowstonePathology.Business.ReportDistribution.Model.TestOrderReportDistributionLog(testOrderReportDistributionLogId, objectId);
                                            testOrderReportDistributionLog.FromTestOrderReportDistribution(testOrderReportDistribution);
                                            testOrderReportDistributionLog.TimeDistributed = DateTime.Now;
                                            panelSetOrder.TestOrderReportDistributionLogCollection.Add(testOrderReportDistributionLog);

                                            this.m_ReportDistributionLogEntryCollection.AddEntry("INFO", "Publish Next", testOrderReportDistribution.DistributionType, panelSetOrder.ReportNo, panelSetOrder.MasterAccessionNo,
                                                                                                 testOrderReportDistribution.PhysicianName, testOrderReportDistribution.ClientName, "TestOrderReportDistribution Distributed");
                                        }
                                        else
                                        {
                                            testOrderReportDistribution.ScheduledDistributionTime = DateTime.Now.AddMinutes(30);
                                            testOrderReportDistribution.Rescheduled        = true;
                                            testOrderReportDistribution.RescheduledMessage = distributionResult.Message;

                                            this.m_ReportDistributionLogEntryCollection.AddEntry("ERROR", "Publish Next", testOrderReportDistribution.DistributionType, panelSetOrder.ReportNo, panelSetOrder.MasterAccessionNo,
                                                                                                 testOrderReportDistribution.PhysicianName, testOrderReportDistribution.ClientName, distributionResult.Message);

                                            System.Net.Mail.MailMessage message = new System.Net.Mail.MailMessage("*****@*****.**", "*****@*****.**", System.Windows.Forms.SystemInformation.UserName, distributionResult.Message);
                                            System.Net.Mail.SmtpClient  client  = new System.Net.Mail.SmtpClient("10.1.2.111");

                                            Uri uri = new Uri("http://tempuri.org/");
                                            System.Net.ICredentials      credentials = System.Net.CredentialCache.DefaultCredentials;
                                            System.Net.NetworkCredential credential  = credentials.GetCredential(uri, "Basic");

                                            client.Credentials = credential;
                                            client.Send(message);
                                        }
                                    }
                                }
                            }

                            panelSetOrder.Published            = true;
                            panelSetOrder.TimeLastPublished    = DateTime.Now;
                            panelSetOrder.ScheduledPublishTime = null;

                            Business.Persistence.DocumentGateway.Instance.Save();
                        }
                    }

                    processCount += 1;
                    if (processCount == maxProcessCount)
                    {
                        break;
                    }
                }
            }

            YellowstonePathology.Business.Persistence.DocumentGateway.Instance.Push(this);
        }
        /*
         * private void HandleNotificationEmail(YellowstonePathology.Business.Test.PanelSetOrder panelSetOrder)
         * {
         *  YellowstonePathology.Business.Domain.Physician physician = YellowstonePathology.Business.Gateway.PhysicianClientGateway.GetPhysicianByMasterAccessionNo(panelSetOrder.MasterAccessionNo);
         *  if (physician.SendPublishNotifications == true)
         *  {
         *      if (panelSetOrder.Distribute == true)
         *      {
         *          string subject = "You have a result ready for review: " + panelSetOrder.PanelSetName;
         *          string body = "You have a patient report ready. You can review the report by using YPI Connect.  If you don't have access to YPI Connect please call us at (406)238-6360.";
         *
         *          System.Net.Mail.MailAddress from = new System.Net.Mail.MailAddress("*****@*****.**");
         *          System.Net.Mail.MailAddress to = new System.Net.Mail.MailAddress(physician.PublishNotificationEmailAddress);
         *          //System.Net.Mail.MailAddress bcc = new System.Net.Mail.MailAddress("*****@*****.**");
         *
         *          System.Net.Mail.MailMessage message = new System.Net.Mail.MailMessage(from, to);
         *          message.Subject = subject;
         *          message.Body = body;
         *          //message.Bcc.Add(bcc);
         *
         *          System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient("10.1.2.111");
         *
         *          Uri uri = new Uri("http://tempuri.org/");
         *          System.Net.ICredentials credentials = System.Net.CredentialCache.DefaultCredentials;
         *          System.Net.NetworkCredential credential = credentials.GetCredential(uri, "Basic");
         *
         *          client.Credentials = credential;
         *          client.Send(message);
         *
         *          panelSetOrder.TimeOfLastPublishNotification = DateTime.Now;
         *          panelSetOrder.PublishNotificationSent = true;
         *      }
         *  }
         * }
         */

        private YellowstonePathology.Business.ReportDistribution.Model.DistributionResult Distribute(YellowstonePathology.Business.ReportDistribution.Model.TestOrderReportDistribution testOrderReportDistribution, Business.Test.AccessionOrder accessionOrder, Business.Test.PanelSetOrder panelSetOrder)
        {
            YellowstonePathology.Business.ReportDistribution.Model.DistributionResult result = null;

            switch (testOrderReportDistribution.DistributionType)
            {
            case YellowstonePathology.Business.ReportDistribution.Model.DistributionType.FAX:
                result = this.HandleFaxDistribution(testOrderReportDistribution);
                break;

            case YellowstonePathology.Business.ReportDistribution.Model.DistributionType.EPIC:
                result = this.HandleEPICDistribution(testOrderReportDistribution, accessionOrder, panelSetOrder);
                break;

            case YellowstonePathology.Business.ReportDistribution.Model.DistributionType.ECW:
                result = this.HandleECWDistribution(testOrderReportDistribution, accessionOrder);
                break;

            case YellowstonePathology.Business.ReportDistribution.Model.DistributionType.ATHENA:
                result = this.HandleATHENADistribution(testOrderReportDistribution.ReportNo, accessionOrder);
                break;

            case YellowstonePathology.Business.ReportDistribution.Model.DistributionType.MEDITECH:
                result = this.HandleMeditechDistribution(testOrderReportDistribution.ReportNo, accessionOrder);
                break;

            case YellowstonePathology.Business.ReportDistribution.Model.DistributionType.WEBSERVICE:
                result = this.HandleWebServiceDistribution(testOrderReportDistribution);
                break;

            case YellowstonePathology.Business.ReportDistribution.Model.DistributionType.PRINT:
                result = this.HandlePrintDistribution(testOrderReportDistribution);
                break;

            case YellowstonePathology.Business.ReportDistribution.Model.DistributionType.MTDOH:
                result = this.HandleMTDOHDistribution(testOrderReportDistribution.ReportNo, accessionOrder);
                break;

            case YellowstonePathology.Business.ReportDistribution.Model.DistributionType.WYDOH:
                result = this.HandleWYDOHDistribution(testOrderReportDistribution.ReportNo, accessionOrder);
                break;

            default:
                result = this.HandleNoImplemented(testOrderReportDistribution);
                break;
            }

            if (result != null && result.IsComplete == false)
            {
                Business.Logging.EmailExceptionHandler.HandleException(result.Message);
                throw new Exception(result.Message);
            }

            return(result);
        }
예제 #3
0
        private YellowstonePathology.Business.ReportDistribution.Model.DistributionResult Distribute(YellowstonePathology.Business.ReportDistribution.Model.TestOrderReportDistribution testOrderReportDistribution, Business.Test.AccessionOrder accessionOrder)
        {
            YellowstonePathology.Business.ReportDistribution.Model.DistributionResult result = null;

            switch (testOrderReportDistribution.DistributionType)
            {
            case YellowstonePathology.Business.ReportDistribution.Model.DistributionType.FAX:
                result = this.HandleFaxDistribution(testOrderReportDistribution);
                break;

            case YellowstonePathology.Business.ReportDistribution.Model.DistributionType.EPIC:
                result = this.HandleEPICDistribution(testOrderReportDistribution, accessionOrder);
                break;

            case YellowstonePathology.Business.ReportDistribution.Model.DistributionType.ECW:
                result = this.HandleECWDistribution(testOrderReportDistribution, accessionOrder);
                break;

            case YellowstonePathology.Business.ReportDistribution.Model.DistributionType.ATHENA:
                result = this.HandleATHENADistribution(testOrderReportDistribution.ReportNo, accessionOrder);
                break;

            case YellowstonePathology.Business.ReportDistribution.Model.DistributionType.MEDITECH:
                result = this.HandleMeditechDistribution(testOrderReportDistribution.ReportNo, accessionOrder);
                break;

            case YellowstonePathology.Business.ReportDistribution.Model.DistributionType.WEBSERVICE:
                result = this.HandleWebServiceDistribution(testOrderReportDistribution);
                break;

            case YellowstonePathology.Business.ReportDistribution.Model.DistributionType.PRINT:
                result = this.HandlePrintDistribution(testOrderReportDistribution);
                break;

            case YellowstonePathology.Business.ReportDistribution.Model.DistributionType.MTDOH:
                result = this.HandleMTDOHDistribution(testOrderReportDistribution.ReportNo, accessionOrder);
                break;

            case YellowstonePathology.Business.ReportDistribution.Model.DistributionType.WYDOH:
                result = this.HandleWYDOHDistribution(testOrderReportDistribution.ReportNo, accessionOrder);
                break;

            default:
                result = this.HandleNoImplemented(testOrderReportDistribution);
                break;
            }

            return(result);
        }