public ExpenseReportFact(ExpenseReport expenseReport, DateTime timeStamp)
 {
     ExpenseReportId = expenseReport.Id;
     Number = expenseReport.Number;
     Status = expenseReport.Status.FriendlyName;
     Submitter = expenseReport.Submitter.GetFullName();
     if(Approver != null)
         Approver = expenseReport.Approver.GetFullName();
     TimeStamp = timeStamp;
     Total = expenseReport.Total;
 }
        private static void Main()
        {
            var report = new ExpenseReport();
            report.AddExpense(new Expense(ExpenseType.Breakfast, 525));
            report.AddExpense(new Expense(ExpenseType.Breakfast, 400));
            report.AddExpense(new Expense(ExpenseType.Breakfast, 500));
            report.AddExpense(new Expense(ExpenseType.Breakfast, 1050));
            report.AddExpense(new Expense(ExpenseType.CarRental, 5600));
            report.AddExpense(new Expense(ExpenseType.Dinner, 4800));
            report.AddExpense(new Expense(ExpenseType.Dinner, 5400));

            report.PrintReport(new ConsoleReportPrinter());
        }
        public void ShouldSave()
        {
            new DatabaseTester().Clean();

            var creator  = new Employee("1", "1", "1", "1");
            var assignee = new Employee("2", "2", "2", "2");
            var order    = new ExpenseReport();

            order.Submitter   = creator;
            order.Approver    = assignee;
            order.Title       = "foo";
            order.Description = "bar";
            order.ChangeStatus(ExpenseReportStatus.Approved);
            order.Number = "123";
            ISession session = DataContext.GetTransactedSession();

            session.SaveOrUpdate(creator);
            session.SaveOrUpdate(assignee);
            session.Transaction.Commit();

            var repository = new ExpenseReportRepository();

            repository.Save(order);

            session.Dispose();

            ISession session2         = DataContext.GetTransactedSession();
            var      rehydratedReport = session2.Load <ExpenseReport>(order.Id);

            Assert.That(rehydratedReport.Id, Is.EqualTo(order.Id));
            Assert.That(rehydratedReport.Submitter.Id, Is.EqualTo(order.Submitter.Id));
            Assert.That(rehydratedReport.Approver.Id, Is.EqualTo(order.Approver.Id));
            Assert.That(rehydratedReport.Title, Is.EqualTo(order.Title));
            Assert.That(rehydratedReport.Description, Is.EqualTo(order.Description));
            Assert.That(rehydratedReport.Status, Is.EqualTo(order.Status));

            rehydratedReport.Number.ShouldEqual(order.Number);
        }
Esempio n. 4
0
        protected override void Seed(MobileServiceContext context)
        {
            var expense = new ExpenseModel
            {
                Name = "Flight",
            };

            var expenseReport = new ExpenseReport
            {
                Approver    = "Ian Leathurbyury",
                ReportName  = "FY17 LATAM trip",
                ReportOwner = "Michael Watson",
                Status      = "InProgress",
            };

            expenseReport.Expenses.Add(expense);

            context.ExpenseReports.Add(expenseReport);

            context.SaveChanges();

            base.Seed(context);
        }
Esempio n. 5
0
        private ExpenseReport GetReport(ExpenseModel data)
        {
            var report    = new ExpenseReport();
            var dataTable = GetDataTable();

            var dataSet = new System.Data.DataSet();

            dataSet.Tables.Add(dataTable);

            for (int i = 0; i < data.ExpenseItems.Count; i++)
            {
                DataRow row = dataSet.Tables["ExpenseItem"].NewRow();
                row["No"]      = i + 1;
                row["Name"]    = data.ExpenseItems[i].Name;
                row["Income"]  = data.ExpenseItems[i].Type == 0 ? data.ExpenseItems[i].Money : 0;
                row["Expense"] = data.ExpenseItems[i].Type == 1 ? data.ExpenseItems[i].Money : 0;
                dataSet.Tables["ExpenseItem"].Rows.Add(row);
            }
            report.SetDataSource(dataSet);
            report.SetParameterValue("FullName", data.FullName);
            report.SetParameterValue("Date", data.Date);
            return(report);
        }
        public void ShouldResolveAndExecuteAHandler()
        {
            new DatabaseTester().Clean();
            var report = new ExpenseReport
            {
                Title       = "TestExpens",
                Description = "This is an ",
                Number      = "123",
                Status      = ExpenseReportStatus.Cancelled
            };

            using (var context = new StubbedDataContextFactory().GetContext())
            {
                context.AddRange(report);
                context.SaveChanges();
            }

            var container = new DatabaseTester().GetContainer();
            var bus       = container.GetInstance <Bus>();
            var reports   = bus.Send(new ListExpenseReportsCommand());;

            reports.Length.ShouldBe(1);
        }
Esempio n. 7
0
        public void ClearExpenseLines(ExpenseReport er)
        {
            List <ExpenseLine> ELs = new List <ExpenseLine>();

            // Remove EL from list (iterate backward to be safe)
            for (int i = er.ExpenseLines.Count - 1; i >= 0; i--)
            {
                ELs.Add(er.ExpenseLines[i]);
                er.RemoveLine(er.ExpenseLines[i]);
            }

            // Destroy all ELs
            for (int i = ELs.Count - 1; i >= 0; i--)
            {
                ExpenseLine toRemove = ELs[i];
                //ExpenseLine toRemove = Db.ExpenseLines.SingleOrDefault(el => el.Id == ELs[i].Id);
                if (toRemove != null)
                {
                    Db.ExpenseLines.Remove(toRemove);
                }
            }
            Db.SaveChanges();
        }
Esempio n. 8
0
        public void ShouldPersistExportReportFact()
        {
            new DatabaseTester().Clean();
            var employee = new Employee("somethingelse", "Jeffrey", "Palermo", "jeffrey @ clear dash measure.com");

            employee.Id = Guid.NewGuid();
            var report = new ExpenseReport
            {
                Number    = "123",
                Status    = ExpenseReportStatus.Draft,
                Submitter = employee
            };

            DateTime          setDate           = new DateTime(2015, 1, 1);
            ExpenseReportFact expenseReportFact = new ExpenseReportFact(report, setDate);

            var command = new AddExpenseReportFactCommand(expenseReportFact);

            IContainer container = DependencyRegistrarModule.EnsureDependenciesRegistered();
            var        bus       = container.GetInstance <Bus>();

            bus.Send(command);

            ExpenseReportFact reHydratedExpenseReportFact;

            using (EfCoreContext session = new StubbedDataContextFactory().GetContext())
            {
                reHydratedExpenseReportFact = session.Find <ExpenseReportFact>(expenseReportFact.Id);
            }

            reHydratedExpenseReportFact.Approver.ShouldEqual(expenseReportFact.Approver);
            reHydratedExpenseReportFact.Number.ShouldEqual(expenseReportFact.Number);
            reHydratedExpenseReportFact.Status.ShouldEqual(expenseReportFact.Status);
            reHydratedExpenseReportFact.Submitter.ShouldEqual(expenseReportFact.Submitter);
            reHydratedExpenseReportFact.TimeStamp.ShouldEqual(expenseReportFact.TimeStamp);
            reHydratedExpenseReportFact.Total.ShouldEqual(expenseReportFact.Total);
        }
        public void ShouldSearchBySpecificationWithCreator()
        {
            new DatabaseTester().Clean();

            var creator1 = new Employee("1", "1", "1", "1");
            var creator2 = new Employee("2", "2", "2", "2");
            var order1   = new ExpenseReport();

            order1.Submitter = creator1;
            order1.Number    = "123";
            var order2 = new ExpenseReport();

            order2.Submitter = creator2;
            order2.Number    = "456";

            using (EfCoreContext dbContext = new StubbedDataContextFactory().GetContext())
            {
                dbContext.Add(creator1);
                dbContext.Add(creator2);
                dbContext.Add(order1);
                dbContext.Add(order2);
                dbContext.SaveChanges();
            }

            var specification = new ExpenseReportSpecificationQuery {
                Submitter = creator1
            };

            IContainer container = DependencyRegistrarModule.EnsureDependenciesRegistered();
            var        bus       = container.GetInstance <Bus>();
            MultipleResult <ExpenseReport> result = bus.Send(specification);

            ExpenseReport[] reports = result.Results;

            Assert.That(reports.Length, Is.EqualTo(1));
            Assert.That(reports[0].Id, Is.EqualTo(order1.Id));
        }
        public void ShouldEagerFetchAssociations()
        {
            new DatabaseTester().Clean();

            var employee1 = new Employee("1", "1", "1", "1");
            var employee2 = new Employee("2", "2", "2", "2");
            var report    = new ExpenseReport();

            report.Submitter = employee1;
            report.Approver  = employee1;
            report.Number    = "123";
            report.ChangeStatus(employee2, DateTime.Now, ExpenseReportStatus.Draft, ExpenseReportStatus.Submitted);;

            using (EfCoreContext dbContext = new StubbedDataContextFactory().GetContext())
            {
                dbContext.Add(employee1);
                dbContext.Add(report);
                dbContext.SaveChanges();
            }

            var specification = new ExpenseReportSpecificationQuery()
            {
                Status = ExpenseReportStatus.Submitted
            };

            IContainer container = DependencyRegistrarModule.EnsureDependenciesRegistered();
            var        bus       = container.GetInstance <Bus>();
            MultipleResult <ExpenseReport> result = bus.Send(specification);

            ExpenseReport[] reports = result.Results;

            Assert.That(reports.Length, Is.EqualTo(1));
            Assert.That(reports[0].Id, Is.EqualTo(report.Id));
            reports[0].Submitter.ShouldEqual(employee1);
            reports[0].Approver.ShouldEqual(employee1);
            reports[0].AuditEntries.ToArray()[0].Employee.ShouldEqual(employee2);
        }
        public void ShouldAddFact()
        {
            new DatabaseTester().Clean();

            var creator       = new Employee("1", "1", "1", "1");
            var assignee      = new Employee("2", "2", "2", "2");
            var expenseReport = new ExpenseReport
            {
                Submitter   = creator,
                Approver    = assignee,
                Title       = "foo",
                Description = "bar",
                Number      = "123"
            };

            expenseReport.ChangeStatus(ExpenseReportStatus.Approved);
            ExpenseReportFact expenseReportFact = new ExpenseReportFact(expenseReport, new DateTime(2012, 1, 1));


            using (EfCoreContext context = new StubbedDataContextFactory().GetContext())
            {
                context.Add(expenseReportFact);
                context.SaveChanges();
            }

            using (EfCoreContext context = new StubbedDataContextFactory().GetContext())
            {
                var reportFact = context.Find <ExpenseReportFact>(expenseReportFact.Id);

                reportFact.Total.ShouldEqual(expenseReportFact.Total);
                reportFact.TimeStamp.ShouldEqual(expenseReportFact.TimeStamp);
                reportFact.Number.ShouldEqual(expenseReportFact.Number);
                reportFact.Status.ShouldEqual(expenseReportFact.Status);
                reportFact.Submitter.ShouldEqual(expenseReportFact.Submitter);
                reportFact.Approver.ShouldEqual(expenseReportFact.Approver);
            }
        }
        public void ShouldSearchBySpecificationWithStatus()
        {
            new DatabaseTester().Clean();

            var employee1 = new Employee("1", "1", "1", "1");
            var employee2 = new Employee("2", "2", "2", "2");
            var order1    = new ExpenseReport();

            order1.Submitter = employee2;
            order1.Approver  = employee1;
            order1.Number    = "123";
            order1.Status    = ExpenseReportStatus.Submitted;
            var order2 = new ExpenseReport();

            order2.Submitter = employee1;
            order2.Approver  = employee2;
            order2.Number    = "456";
            order2.Status    = ExpenseReportStatus.Draft;

            ISession session = DataContext.GetTransactedSession();

            session.SaveOrUpdate(employee1);
            session.SaveOrUpdate(employee2);
            session.SaveOrUpdate(order1);
            session.SaveOrUpdate(order2);
            session.Transaction.Commit();
            session.Dispose();

            var repository    = new ExpenseReportRepository();
            var specification = new SearchSpecification();

            specification.MatchStatus(ExpenseReportStatus.Submitted);
            ExpenseReport[] orders = repository.GetMany(specification);

            Assert.That(orders.Length, Is.EqualTo(1));
            Assert.That(orders[0].Id, Is.EqualTo(order1.Id));
        }
        public void ShouldAddFact()
        {
            new DatabaseTester().Clean();

            var creator       = new Employee("1", "1", "1", "1");
            var assignee      = new Employee("2", "2", "2", "2");
            var expenseReport = new ExpenseReport
            {
                Submitter   = creator,
                Approver    = assignee,
                Title       = "foo",
                Description = "bar",
                Number      = "123"
            };

            expenseReport.ChangeStatus(ExpenseReportStatus.Approved);
            ExpenseReportFact expenseReportFact = new ExpenseReportFact(expenseReport, new DateTime(2012, 1, 1));


            using (ISession session = DataContext.GetTransactedSession())
            {
                //session.SaveOrUpdate(expenseReport);
                session.SaveOrUpdate(expenseReportFact);
                session.Transaction.Commit();
            }

            using (ISession session = DataContext.GetTransactedSession())
            {
                var reportFact = session.Load <ExpenseReportFact>(expenseReportFact.Id);
                reportFact.Total.ShouldEqual(expenseReportFact.Total);
                reportFact.TimeStamp.ShouldEqual(expenseReportFact.TimeStamp);
                reportFact.Number.ShouldEqual(expenseReportFact.Number);
                reportFact.Status.ShouldEqual(expenseReportFact.Status);
                reportFact.Submitter.ShouldEqual(expenseReportFact.Submitter);
                reportFact.Approver.ShouldEqual(expenseReportFact.Approver);
            }
        }
        public void ShouldSearchBySpecificationWithCreator()
        {
            new DatabaseTester().Clean();

            var creator1 = new Employee("1", "1", "1", "1");
            var creator2 = new Employee("2", "2", "2", "2");
            var order1   = new ExpenseReport();

            order1.Submitter = creator1;
            order1.Number    = "123";
            var order2 = new ExpenseReport();

            order2.Submitter = creator2;
            order2.Number    = "456";

            using (ISession session = DataContext.GetTransactedSession())
            {
                session.SaveOrUpdate(creator1);
                session.SaveOrUpdate(creator2);
                session.SaveOrUpdate(order1);
                session.SaveOrUpdate(order2);
                session.Transaction.Commit();
            }

            var specification = new ExpenseReportSpecificationQuery {
                Submitter = creator1
            };

            IContainer container = DependencyRegistrarModule.EnsureDependenciesRegistered();
            var        bus       = container.GetInstance <Bus>();
            MultipleResult <ExpenseReport> result = bus.Send(specification);

            ExpenseReport[] reports = result.Results;

            Assert.That(reports.Length, Is.EqualTo(1));
            Assert.That(reports[0].Id, Is.EqualTo(order1.Id));
        }
        public void ShouldSaveExpenses()
        {
            new DatabaseTester().Clean();

            var creator  = new Employee("1", "1", "1", "1");
            var assignee = new Employee("2", "2", "2", "2");
            var report   = new ExpenseReport();

            report.Submitter   = creator;
            report.Approver    = assignee;
            report.Title       = "foo";
            report.Description = "bar";
            report.ChangeStatus(ExpenseReportStatus.Approved);
            report.Number = "123";
            report.AddExpense("howdy", 123.45m);

            using (ISession session = DataContext.GetTransactedSession())
            {
                session.SaveOrUpdate(creator);
                session.SaveOrUpdate(assignee);
                session.SaveOrUpdate(report);
                session.Transaction.Commit();
            }

            ExpenseReport rehydratedExpenseReport;

            using (ISession session2 = DataContext.GetTransactedSession())
            {
                rehydratedExpenseReport = session2.Load <ExpenseReport>(report.Id);
            }

            Expense x = report.GetExpenses()[0];
            Expense y = rehydratedExpenseReport.GetExpenses()[0];

            Assert.That(x.Description, Is.EqualTo(y.Description));
            Assert.That(x.Amount, Is.EqualTo(y.Amount));
        }
        public void ShouldSaveAuditEntries()
        {
            new DatabaseTester().Clean();

            var creator  = new Employee("1", "1", "1", "1");
            var assignee = new Employee("2", "2", "2", "2");
            var report   = new ExpenseReport();

            report.Submitter   = creator;
            report.Approver    = assignee;
            report.Title       = "foo";
            report.Description = "bar";
            report.ChangeStatus(ExpenseReportStatus.Approved);
            report.Number = "123";
            report.AddAuditEntry(new AuditEntry(creator, DateTime.Now, ExpenseReportStatus.Submitted,
                                                ExpenseReportStatus.Approved));

            using (ISession session = DataContext.GetTransactedSession())
            {
                session.SaveOrUpdate(creator);
                session.SaveOrUpdate(assignee);
                session.SaveOrUpdate(report);
                session.Transaction.Commit();
            }

            ExpenseReport rehydratedExpenseReport;

            using (ISession session2 = DataContext.GetTransactedSession())
            {
                rehydratedExpenseReport = session2.Load <ExpenseReport>(report.Id);
            }

            var x = report.GetAuditEntries()[0];
            var y = rehydratedExpenseReport.GetAuditEntries()[0];

            Assert.That(x.EndStatus, Is.EqualTo(y.EndStatus));
        }
Esempio n. 17
0
        public void ShouldSaveWithMultipleInstancesOfEmployee()
        {
            new ZDataLoader().PopulateDatabase();
            IContainer container = DependencyRegistrarModule.EnsureDependenciesRegistered();
            var        bus       = container.GetInstance <Bus>();

            Employee approver  = bus.Send(new EmployeeByUserNameQuery(ZDataLoader.KnownEmployeeUsername)).Result;
            Employee submitter = bus.Send(new EmployeeByUserNameQuery(ZDataLoader.KnownEmployeeUsername)).Result;

            ExpenseReport expenseReport = new ExpenseReport();

            expenseReport.Number      = ZDataLoader.KnownExpenseReportNumber;
            expenseReport.Submitter   = submitter;
            expenseReport.Approver    = approver;
            expenseReport.Title       = "some title";
            expenseReport.Description = "some descriptioni";
            expenseReport.Total       = 34;

            using (var context = container.GetInstance <EfCoreContext>())
            {
                context.Update(expenseReport);
                context.SaveChanges();
            }
        }
Esempio n. 18
0
        public void ShouldNotBeValidWithWrongEmployee()
        {
            var order = new ExpenseReport();

            order.Status = ExpenseReportStatus.Approved;
            var employee          = new Employee();
            var differentEmployee = new Employee();
            var approver          = new Employee();

            order.Submitter = employee;
            order.Approver  = approver;

            var command = new ApprovedToCancelledCommand();

            Assert.That(command.IsValid(new ExecuteTransitionCommand {
                Report = order, CurrentUser = approver
            }), Is.False);

            var command2 = new ApprovedToCancelledCommand();

            Assert.That(command2.IsValid(new ExecuteTransitionCommand {
                Report = order, CurrentUser = differentEmployee
            }), Is.False);
        }
        public void ShouldSaveAuditEntries()
        {
            new DatabaseTester().Clean();

            var creator  = new Employee("1", "1", "1", "1");
            var assignee = new Employee("2", "2", "2", "2");
            var order    = new ExpenseReport();

            order.Submitter   = creator;
            order.Approver    = assignee;
            order.Title       = "foo";
            order.Description = "bar";
            order.ChangeStatus(ExpenseReportStatus.Approved);
            order.Number = "123";
            order.AddAuditEntry(new AuditEntry(creator, DateTime.Now, ExpenseReportStatus.Submitted,
                                               ExpenseReportStatus.Approved));

            ISession session = DataContext.GetTransactedSession();

            session.SaveOrUpdate(creator);
            session.SaveOrUpdate(assignee);
            session.Transaction.Commit();

            var repository = new ExpenseReportRepository();

            repository.Save(order);

            session.Dispose();

            ISession session2         = DataContext.GetTransactedSession();
            var      rehydratedReport = session2.Load <ExpenseReport>(order.Id);
            var      x = order.GetAuditEntries()[0];
            var      y = rehydratedReport.GetAuditEntries()[0];

            Assert.That(x.BeginStatus, Is.EqualTo(y.BeginStatus));
        }
        static void Main()
        {
            List <Employee> managers = new List <Employee>
            {
                new Employee("William Worker", decimal.Zero),
                new Employee("Mary Manager", new decimal(1000)),
                new Employee("Victor Vicepres", new decimal(5000)),
                new Employee("Paula President", new decimal(20000)),
            };

            decimal expenseReportAmount;

            while (ConsoleInput.TryReadDecimal("Expense report amount:", out expenseReportAmount))
            {
                IExpenseReport expense = new ExpenseReport(expenseReportAmount);

                bool expenseProcessed = false;

                foreach (Employee approver in managers)
                {
                    ApprovalResponse response = approver.ApproveExpense(expense);

                    if (response != ApprovalResponse.BeyondApprovalLimit)
                    {
                        Console.WriteLine("The request was {0}.", response);
                        expenseProcessed = true;
                        break;
                    }
                }

                if (!expenseProcessed)
                {
                    Console.WriteLine("No one was able to approve your expense.");
                }
            }
        }
Esempio n. 21
0
        public void ShouldTransitionStateProperly()
        {
            var order = new ExpenseReport();

            order.Number = "123";
            order.Status = ExpenseReportStatus.Draft;
            var employee = new Employee();

            order.Submitter = employee;

            var mocks          = new MockRepository();
            var commandVisitor = mocks.DynamicMock <IStateCommandVisitor>();

            commandVisitor.Save(order);
            commandVisitor.GoToEdit(order);
            mocks.ReplayAll();

            var command = new DraftingCommand(order, employee);

            command.Execute(commandVisitor);

            mocks.VerifyAll();
            Assert.That(order.Status, Is.EqualTo(ExpenseReportStatus.Draft));
        }
Esempio n. 22
0
 internal ExpenseReportViewModel(ExpenseReport expenseReport, IServiceFactory serviceFactory)
     : this(serviceFactory)
 {
     this.Load(expenseReport);
 }
Esempio n. 23
0
 protected StateCommandBase(ExpenseReport expenseReport, Employee currentUser)
 {
     _expenseReport = expenseReport;
     _currentUser = currentUser;
 }
        private void Load(ExpenseReport expenseReport)
        {
            this.Amount = expenseReport.Amount;
            this.Approver = expenseReport.Approver;
            this.CostCenter = expenseReport.CostCenter;
            this.DateResolved = expenseReport.DateResolved;
            this.DateSubmitted = expenseReport.DateSubmitted;
            this.EmployeeId = expenseReport.EmployeeId;
            this.ExpenseReportId = expenseReport.ExpenseReportId;
            this.Notes = expenseReport.Notes;
            this.Status = expenseReport.Status;

            switch (this.Status)
            {
                case ExpenseReportStatus.Saved: this.DisplayDate = this.DateSaved.GetValueOrDefault(); break;
                case ExpenseReportStatus.Approved: this.DisplayDate = this.DateResolved.GetValueOrDefault(); break;
                case ExpenseReportStatus.Submitted: this.DisplayDate = this.DateSubmitted.GetValueOrDefault(); break;
            }
        }
 protected override bool userCanExecute(Employee currentUser, ExpenseReport report)
 {
     return currentUser == report.Submitter;
 }
Esempio n. 26
0
        private async void LoadData()
        {
            viewModel.VisibleLoad = true;

            viewModel.ExpenseEntries = new System.Collections.ObjectModel.ObservableCollection <ExpenseEntryDetailsViewModel>();
            List <ProjectInsight.Models.TimeAndExpense.ExpenseEntry> expenseEntries = new List <ProjectInsight.Models.TimeAndExpense.ExpenseEntry>();

            if (viewModel.IsCurrent)
            {
                listView.AllowSwiping = true;
                expenseEntries        = await ExpenseEntryService.client.GetNotOnExpenseReportAsync(Common.CurrentWorkspace.UserID, new ProjectInsight.Models.Base.ModelProperties("default,UploadedFile,ProjectName,CompanyName,Task,Project;Project:ItemNumberFullAndNameDisplayPreference;Task:ItemNumberFullAndNameDisplayPreference"));

                expenseEntries = expenseEntries.OrderByDescending(x => x.UpdatedDateTimeUTC).ToList();
                viewModel.Name = String.Empty;
                var report = await ExpenseReportService.client.GetExpenseReportInfoAsync(Common.CurrentWorkspace.UserID);

                if (report != null)
                {
                    if (report.UnsubmittedExpenseCount != null && report.UnsubmittedExpenseCount > 0)
                    {
                        viewModel.IsVisibleSubmitButton = true;
                    }
                    else
                    {
                        viewModel.IsVisibleSubmitButton = false;
                    }
                    viewModel.ActualCost = report.UnsubmittedExpenseTotal != null ? report.UnsubmittedExpenseTotal.Value : 0;
                    if (report.EarliestExpenseEntryDate != null)
                    {
                        viewModel.PeriodFormated = string.Format("{0} - {1}", report.EarliestExpenseEntryDate.Value.ToString("M/d/yy"), "Present");
                    }
                }
            }
            else
            {
                if (viewModel.Id != null)
                {
                    ExpenseReport report = await ExpenseReportService.client.GetAsync(viewModel.Id.Value, new ProjectInsight.Models.Base.ModelProperties("default,UserApprover,ApprovalStatusDescription,ExpenseEntries,IsRejected,ExpenseEntries,User;ExpenseEntry:default,ProjectName,CompanyName,Task,Project;Project:ItemNumberFullAndNameDisplayPreference;Task:ItemNumberFullAndNameDisplayPreference;User:default,Photo,PhotoUrl,PhotoMediumUrl,PhotoThumbnailUrl,AvatarHtml"));

                    if (report != null)
                    {
                        viewModel.ActualCost = report.ActualCost != null ? report.ActualCost.Value : 0;
                        expenseEntries       = report.ExpenseEntries.OrderByDescending(x => x.Date).ToList();

                        viewModel.Name = report.User.FirstName + " " + report.User.LastName;
                        viewModel.ApprovalStatusDescription = report.ApprovalStatusDescription;

                        listView.AllowSwiping = report.IsRejected ?? false;
                        if (report.StartDate == null || report.EndDate == null)
                        {
                            viewModel.PeriodFormated = String.Empty;
                        }
                        else
                        {
                            viewModel.PeriodFormated = string.Format("{0} - {1}", report.StartDate.Value.ToString("M/d/yy"), report.EndDate.Value.ToString("M/d/yy"));
                        }

                        int status = report.ApprovalStatus ?? 0;

                        if (report.UserApprover_Id.HasValue && report.UserApprover_Id == Common.CurrentWorkspace.UserID && status == 0)
                        {
                            viewModel.RequiresApprovalFromCurrentUser = true;
                        }
                        else
                        {
                            viewModel.RequiresApprovalFromCurrentUser = false;
                        }

                        viewModel.ShowStatus = true;

                        //----------------------
                        if (status == 5)
                        {
                            statusIcon.Source = "approved"; // "timesheet_approved.png";
                        }
                        else if (status == 6)
                        {
                            statusIcon.Source = "rejected";//"timesheet_rejected.png";
                        }
                        else
                        {
                            statusIcon.Source = "pending"; //"timesheet_pending.png";
                        }
                        slAvatar.Children.Clear();
                        if (string.IsNullOrEmpty(report.UserApprover.PhotoUrl))
                        {
                            if (!string.IsNullOrEmpty(report.UserApprover.AvatarHtml))
                            {
                                string userHTML = report.UserApprover.AvatarHtml;
                                //"<div class=\"user-avatar\" title=\"Gjoko Veljanoski\" style=\"background-color:#00bfff\">GV</div>"
                                //<img class="user-avatar" src="/ProjectInsight.WebApp/Sites/Files/a222e57233a14e15ab67d25e6dbab95e/UserPhotos/6fcc5602c49043c3a2d8d39175040e68/tn_avatar.png" alt="Gjoko Veljanoski" title="Gjoko Veljanoski" />
                                string       myDiv = report.UserApprover.AvatarHtml;
                                HtmlDocument doc   = new HtmlDocument();
                                doc.LoadHtml(myDiv);
                                HtmlNode node           = doc.DocumentNode.SelectSingleNode("div");
                                string   AvatarInitials = "US";
                                string   AvatarColor    = "#fff";
                                string   PhotoURL       = string.Empty;

                                if (node != null)
                                {
                                    AvatarInitials = (node.ChildNodes[0]).OuterHtml;
                                    foreach (HtmlAttribute attr in node.Attributes)
                                    {
                                        if (attr.Name.ToLower() == "style")
                                        {
                                            string[] parts = attr.Value.Split('#');
                                            if (parts != null && parts.Length > 1)
                                            {
                                                AvatarColor = parts[1];
                                            }
                                        }
                                    }
                                }
                                else
                                {
                                    HtmlNode node2 = doc.DocumentNode.SelectSingleNode("img");
                                    if (node2 != null)
                                    {
                                        foreach (HtmlAttribute attr in node2.Attributes)
                                        {
                                            if (attr.Name.ToLower() == "src")
                                            {
                                                string imageUrl = attr.Value.Replace("/ProjectInsight.WebApp", "");
                                                PhotoURL = Common.CurrentWorkspace.WorkspaceURL + imageUrl;
                                            }
                                        }
                                    }
                                }

                                if (string.IsNullOrEmpty(PhotoURL))
                                {
                                    slAvatar.BackgroundColor = Color.FromHex(AvatarColor);

                                    Label lbInitials = new Label();
                                    lbInitials.HeightRequest           = 50;
                                    lbInitials.WidthRequest            = 50;
                                    lbInitials.HorizontalOptions       = LayoutOptions.CenterAndExpand;
                                    lbInitials.VerticalOptions         = LayoutOptions.CenterAndExpand;
                                    lbInitials.HorizontalTextAlignment = TextAlignment.Center;
                                    lbInitials.VerticalTextAlignment   = TextAlignment.Center;
                                    lbInitials.TextColor = Color.White;
                                    lbInitials.Text      = AvatarInitials;
                                    lbInitials.FontSize  = 26;
                                    if (Device.RuntimePlatform.ToLower() == "android")
                                    {
                                        lbInitials.FontFamily = "OpenSans-SemiBold.ttf#Open Sans";
                                    }
                                    else
                                    {
                                        lbInitials.FontFamily = "OpenSans-SemiBold";
                                    }
                                    slAvatar.Children.Add(lbInitials);
                                }
                                else
                                {
                                    Image photo = new Image();
                                    photo.Source            = ImageSource.FromUri(new Uri(Common.CurrentWorkspace.WorkspaceURL + report.UserApprover.PhotoUrl));
                                    photo.HeightRequest     = 50;
                                    photo.WidthRequest      = 50;
                                    photo.HorizontalOptions = LayoutOptions.CenterAndExpand;
                                    photo.VerticalOptions   = LayoutOptions.CenterAndExpand;
                                    slAvatar.Children.Add(photo);
                                }
                                slStatus.Children.Add(slAvatar);
                            }
                        }
                        else
                        {
                            Image photo = new Image();
                            photo.Source        = ImageSource.FromUri(new Uri(Common.CurrentWorkspace.WorkspaceURL + report.UserApprover.PhotoUrl));
                            photo.HeightRequest = 50;
                            photo.WidthRequest  = 50;
                            //photo.HorizontalOptions = LayoutOptions.CenterAndExpand;
                            photo.VerticalOptions = LayoutOptions.CenterAndExpand;
                            slAvatar.Children.Add(photo);
                        }
                        //----------------------
                    }
                }
            }

            foreach (var entry in expenseEntries)
            {
                try
                {
                    ExpenseEntryDetailsViewModel newEntry = new ExpenseEntryDetailsViewModel();

                    newEntry.Id        = entry.Id;
                    newEntry.FirstLine = string.Empty;

                    if (entry.Project != null && !string.IsNullOrEmpty(entry.Project.ItemNumberFullAndNameDisplayPreference))
                    {
                        newEntry.FirstLine = entry.Project.ItemNumberFullAndNameDisplayPreference;
                    }
                    else
                    {
                        if (!string.IsNullOrEmpty(entry.CompanyName))
                        {
                            newEntry.FirstLine = entry.CompanyName;
                        }
                    }

                    newEntry.SecondLine = entry.Date != null?entry.Date.Value.ToString("M/d/yy") : String.Empty;

                    if (entry.Task != null && !string.IsNullOrEmpty(entry.Task.ItemNumberFullAndNameDisplayPreference))
                    {
                        newEntry.SecondLine += " | " + entry.Task.ItemNumberFullAndNameDisplayPreference;
                    }

                    newEntry.ThirdLine  = entry.Description ?? String.Empty;
                    newEntry.ActualCost = entry.ActualCost ?? 0;

                    viewModel.ExpenseEntries.Add(newEntry);
                }
                catch (Exception ex)
                {
                }
            }

            int height = 10 + (viewModel.ExpenseEntries.Count() * 80);

            listView.HeightRequest = slParent.HeightRequest = height;

            viewModel.VisibleLoad = false;
        }
 public ProcessExpenseLineVM()
 {
     ExpenseLines  = new List <ExpenseLine>();
     ExpenseReport = new ExpenseReport();
 }
 public DraftToSubmittedCommand(ExpenseReport expenseReport, Employee currentUser)
     : base(expenseReport, currentUser)
 {
 }
 protected override bool userCanExecute(Employee currentUser, ExpenseReport report)
 {
     if (report.Approver == null) return false;
     return report.Approver.CanActOnBehalf(currentUser);
 }
Esempio n. 30
0
 public void SetUp()
 {
     report = new ExpenseReport();
     printer = new MockReportPrinter();
 }
 protected abstract bool userCanExecute(Employee currentUser, ExpenseReport report);
 public SubmittedToApprovedCommand(ExpenseReport expenseReport, Employee currentUser)
     : base(expenseReport, currentUser)
 {
 }
        public async Task SaveAsync()
        {
            await this._viewService.ExecuteBusyActionAsync(
                async () =>
                {
                    ExpenseReport expenseReport = new ExpenseReport()
                    {
                        Amount = this.Amount,
                        Approver = this.Approver,
                        CostCenter = this.CostCenter,
                        DateResolved = this.DateResolved.GetValueOrDefault(),
                        DateSubmitted = this.DateSubmitted.GetValueOrDefault(),
                        EmployeeId = this.EmployeeId,
                        ExpenseReportId = this.ExpenseReportId,
                        Notes = this.Notes,
                        Status = this.Status,
                    };

                    // save expense report to repository
                    if (this.ExpenseReportId == 0)
                    {
                        this.ExpenseReportId = await this._repositoryService.CreateNewExpenseReportAsync(expenseReport);
                    }
                    else
                    {
                        this.ExpenseReportId = await this._repositoryService.UpdateExpenseReportAsync(expenseReport);
                    }
                    
                    await this.LoadAsync(this.ExpenseReportId);
                });
        }
 protected abstract bool userCanExecute(Employee currentUser, ExpenseReport report);
Esempio n. 35
0
        public async Task PostExpenseReportAsync(ExpenseReport report)
        {
            await expenseReportTable.InsertAsync(report);

            await SyncAsync();
        }
Esempio n. 36
0
 internal ExpenseReportViewModel(ExpenseReportsViewModel expenseReportsViewModel, ExpenseReport expenseReport)
     : this()
 {
     ExpenseReportsViewModel = expenseReportsViewModel;
     this.Load(expenseReport);
 }
 public ProcessExpenseLineVM(ExpenseReport expenseReport, List <ExpenseLine> expenseLines)
 {
     ExpenseLines  = expenseLines;
     ExpenseReport = expenseReport;
 }
Esempio n. 38
0
        private static void DemoChainOfResponsibilityPattern()
        {
            #region Problem of Logic to handle expenseReport is captured at wrong level.

            /* Caller is responsible for iterating over the list.
             * This means, business logic of how expenseReport is promoted in Management chain is captured at the wrong level.
             * I should not be worried about getting approval of my expense report in Management chain. My manager should do it for me.
             * With the Chain of Responsibility pattern, we'll able to achieve the abstraction required behind the scenes.
             */
            //var employees = new List<Employee>
            //{
            //    new Employee("William Worker", decimal.Zero),
            //    new Employee("Mary Manager", 1000),
            //    new Employee("Victor VicePres", 5000),
            //    new Employee("Paula President", 20000),
            //};

            //decimal expenseReportAmount;
            //while(ConsoleInput.TryReadDecimal("Expense report amount:", out expenseReportAmount))
            //{
            //    IExpenseReport expense = new ExpenseReport(expenseReportAmount);

            //    bool expenseProcessed = false;

            //    foreach (var approver in employees)
            //    {
            //        var response = approver.ApproveResponse(expense);
            //        if (response != ApprovalResponse.BeyondApprovalLimit)
            //        {
            //            Console.WriteLine($"The request was {response}.");
            //            expenseProcessed = true;
            //            break;
            //        }
            //    }

            //    if (!expenseProcessed)
            //    {
            //        Console.WriteLine("No one was able to approve your expense.");
            //    }
            //}
            #endregion

            #region Solution through Chain of Responsibility pattern
            ExpenseHandler william = new ExpenseHandler(new Employee("William Worker", decimal.Zero));
            ExpenseHandler mary    = new ExpenseHandler(new Employee("Mary Manager", 1000));
            ExpenseHandler victor  = new ExpenseHandler(new Employee("Victor VicePres", 5000));
            ExpenseHandler paula   = new ExpenseHandler(new Employee("Paula President", 20000));

            william.RegisterNext(mary);
            mary.RegisterNext(victor);
            victor.RegisterNext(paula);

            while (ConsoleInput.TryReadDecimal("Expense report amount:", out decimal expenseReportAmount))
            {
                IExpenseReport expense = new ExpenseReport(expenseReportAmount);

                ApprovalResponse response = william.Approve(expense);
                Console.WriteLine($"The request was {response}.");
            }
            #endregion
        }
Esempio n. 39
0
 protected StateCommandBase(ExpenseReport expenseReport, Employee currentUser)
 {
     _expenseReport = expenseReport;
     _currentUser   = currentUser;
 }
        public async Task<int> UpdateExpenseReportAsync(ExpenseReport expenseReport)
        {
            try
            {
                using (var client = new ExpenseServiceClient())
                {
                    return await client.UpdateExpenseReportAsync(expenseReport);
                }
            }
            catch (System.ServiceModel.EndpointNotFoundException)
            {
                this._viewService.ShowError("Could not connect to configured service.");
            }
            catch (Exception ex)
            {
                this._viewService.ShowError(String.Format("Error in WCF call: {0}", ex.Message));
            }

            return 0;
        }
Esempio n. 41
0
        public void PopulateDatabase()
        {
            new DatabaseTester().Clean();
            ISession session = DataContext.GetTransactedSession();


            //Trainer1
            var jpalermo = new Employee("jpalermo", "Jeffrey", "Palermo", "*****@*****.**");

            session.SaveOrUpdate(jpalermo);

            //Person 1

            //Person 2

            //Person 3
            var damian = new Employee("damian", "Damian", "Brady", "*****@*****.**");

            session.SaveOrUpdate(damian);

            //Person 4

            //Person 5

            //Person 6
            var paul = new Employee("paul", "Paul", "Stovell", "*****@*****.**");

            session.SaveOrUpdate(paul);

            //Person 7

            //Person 8

            //Person 9

            //Person 10

            //Person 11

            //Person 12

            //Person 13

            var hsimpson = new Employee("hsimpson", "Homer", "Simpson", "*****@*****.**");

            session.SaveOrUpdate(hsimpson);

            foreach (ExpenseReportStatus status in ExpenseReportStatus.GetAllItems())
            {
                var report = new ExpenseReport();
                report.Number      = Guid.NewGuid().ToString().Substring(0, 5).ToUpper();
                report.Submitter   = jpalermo;
                report.Approver    = jpalermo;
                report.Status      = status;
                report.Title       = "Expense report starting in status " + status;
                report.Description = "Foo, foo, foo, foo " + status;
                new DateTime(2000, 1, 1, 8, 0, 0);
                report.ChangeStatus(ExpenseReportStatus.Draft);
                report.ChangeStatus(ExpenseReportStatus.Submitted);
                report.ChangeStatus(ExpenseReportStatus.Approved);

                session.SaveOrUpdate(report);
            }

            var order2 = new ExpenseReport();

            order2.Number      = Guid.NewGuid().ToString().Substring(0, 5).ToUpper();
            order2.Submitter   = jpalermo;
            order2.Approver    = jpalermo;
            order2.Status      = ExpenseReportStatus.Approved;
            order2.Title       = "Expense report starting in status ";
            order2.Description = "Foo, foo, foo, foo ";
            new DateTime(2000, 1, 1, 8, 0, 0);
            session.SaveOrUpdate(order2);

            session.Transaction.Commit();
            session.Dispose();
        }
Esempio n. 42
0
 public DraftingCommand(ExpenseReport expenseReport, Employee currentUser)
     : base(expenseReport, currentUser)
 {
 }
 public DraftToSubmittedCommand(ExpenseReport expenseReport, Employee currentUser)
     : base(expenseReport, currentUser)
 {
 }
 internal ExpenseReportViewModel(ExpenseReport expenseReport, IServiceFactory serviceFactory)
     : this(serviceFactory)
 {
     this.Load(expenseReport);
 }