Exemplo n.º 1
0
        /** Creates a new provider report generator which creates a new provider report.
         *  @param provider the provider about whom the report is generated
         *  @param endDate a date within the week for which the report is to be
         *         generated
         *  @throws FileNotFoundException if the file cannot be created.
         */
        public ProviderReportGenerator(Provider provider, DateTime endDate)
        {
            Claims   claims   = null;
            Members  members  = null;
            Services services = null;

            //Create a new provider report
            report = new ProviderReport(provider, endDate);

            try
            {
                //create and open the collections of claims, members and services
                claims = new Claims();
                claims.open();
                members = new Members();
                members.open();
                services = new Services();
                services.open();

                int    noConsultations = 0; //use to count number of consultations
                double totalFee        = 0; //use to accumulate fee

                //get all claims submitted by provider
                List <Claim> providerClaims =
                    claims.findByProvider(provider.getNumber());

                //for each claim
                foreach (Claim nextClaim in providerClaims)
                {
                    //test whether within date range
                    if (nextClaim.getSubmissionDate().after(report.getStartDateRange()) &&
                        nextClaim.getSubmissionDate().before(report.getEndDateRange()))
                    {
                        //get the member to whom the service was provided
                        string memberName;
                        Member member = members.find(nextClaim.getMemberNumber());
                        if (member == null)
                        {
                            memberName = "Invalid Number";
                        }
                        else
                        {
                            memberName = member.getName();
                        }

                        //get the fee for the service
                        double  serviceFee;
                        Service service = services.find(nextClaim.getServiceCode());
                        if (service == null)
                        {
                            serviceFee = 0;   //indicates invalid code
                        }
                        else
                        {
                            serviceFee = service.getFee();
                        }

                        //add claim details to report
                        report.addDetail(nextClaim.getSubmissionDate(),
                                         nextClaim.getServiceDate(), nextClaim.getMemberNumber(),
                                         memberName, nextClaim.getServiceCode(), serviceFee);

                        //increment number of consultations
                        noConsultations++;

                        //accumulate fee
                        totalFee += serviceFee;
                    } //if date in specified week
                }     //for

                //add summary details to report
                report.addSummary(noConsultations, totalFee);
            }//try
            catch (FormatException ex)
            {
                report.addErrorMessage(ex.Message);
            }
            finally
            {
                if (claims != null)
                {
                    claims.close();
                }
                if (members != null)
                {
                    members.close();
                }
                if (services != null)
                {
                    services.close();
                }
            }
        }//constructor
        /**
         * Creates a new SchedulerInterface which then runs the accounting procedure.
         */
        public SchedulerInterface()
        {
            //for communciation with the tester
            UserInterface ui = new UserInterface();

            ui.message("\nRunning the accounting procedure ...\n");

            //Use today's date for all reports
            DateTime now = new DateTime();

            try
            {
                //Generate provider reports
                ui.message("Generating the providers' reports ...");
                Providers providers = new Providers();
                providers.open();
                List <Person> allProviders = providers.getAll();
                foreach (Person person in allProviders)
                {
                    Provider provider = (Provider)person;
                    ProviderReportGenerator generator
                        = new ProviderReportGenerator(provider, now);
                    ProviderReport theReport = generator.getReport();
                    if (theReport.getDetailCount() > 0)
                    {
                        theReport.sendByEmail(provider.getName());
                    }
                }
                providers.close();

                //Generate member reports
                ui.message("Generating the members' reports ...");
                Members members = new Members();
                members.open();
                List <Person> allMembers = members.getAll();
                foreach (Person person in allMembers)
                {
                    Member member = (Member)person;
                    MemberReportGenerator generator
                        = new MemberReportGenerator(member, now);
                    MemberReport theReport = generator.getReport();
                    if (theReport.getDetailCount() > 0)
                    {
                        theReport.sendByEmail(member.getName());
                    }
                }
                members.close();

                //Generate accounts payable report
                ui.message("Generating the accounts payable report ...");
                AccountsPayableReportGenerator generator
                    = new AccountsPayableReportGenerator(now);
                generator.getReport().sendByEmail("Accounts Payable");

                //Generate EFT data
                ui.message("Generating the EFT data ...");
                EFTReportGenerator eftGenerator = new EFTReportGenerator(now);
                eftGenerator.getReport().print("EFT Data");

                ui.message("\nAccounting procedure completed successfully.\n\n");
            }
            catch (FileNotFoundException ex)
            {
                //occurs if a file cannot be created
                ui.errorMessage(ex.Message);
            }
        }//default constructor