Ejemplo n.º 1
0
    private void PopulateClaims(AttestableItems items)
    {
        ExpenseClaims allClaims        = ExpenseClaims.FromOrganization(Organization.PPSE);
        ExpenseClaims unattestedClaims = new ExpenseClaims();

        // LINQ would be nice here. "Where Attested=0".

        foreach (ExpenseClaim claim in allClaims)
        {
            if (!claim.Attested && claim.Open)
            {
                if (attestationRights.ContainsKey(claim.BudgetId))
                {
                    unattestedClaims.Add(claim);
                }
            }
        }

        unattestedClaims.Sort(SortGridClaims);

        foreach (ExpenseClaim claim in unattestedClaims)
        {
            AddAttestableItem(items, claim);
        }
    }
Ejemplo n.º 2
0
    private void PopulateGrid()
    {
        ExpenseClaims allClaims = ExpenseClaims.FromOrganization(Organization.PPSE);

        allClaims.Sort(SortGridItems);

        this.GridExpenseClaims.DataSource = allClaims;
    }
Ejemplo n.º 3
0
        public static ExpensePayouts FromOrganization(int organizationId)
        {
            // This aggregates a list of all pending expense payouts per person,
            // and returns an ExpensePayouts object.

            // It uses a Dictionary<int, List<ExpenseClaim>> to build the data, iterating over
            // all expenses, where the int key is the person identity.

            ExpenseClaims allExpenseClaims = ExpenseClaims.FromOrganization(Organization.FromIdentity(organizationId));
            Dictionary <int, ExpenseClaims> aggregation = new Dictionary <int, ExpenseClaims>();
            ExpensePayouts result = new ExpensePayouts();

            // Aggregate per person

            foreach (ExpenseClaim expense in allExpenseClaims)
            {
                if (expense.Approved && expense.Open)
                {
                    // Ready for payout

                    if (!aggregation.ContainsKey(expense.ClaimingPersonId))
                    {
                        aggregation[expense.ClaimingPersonId] = new ExpenseClaims();
                    }

                    aggregation[expense.ClaimingPersonId].Add(expense);
                }
            }

            // Create ExpensePayout objects

            foreach (int personId in aggregation.Keys)
            {
                result.Add(new ExpensePayout(Person.FromIdentity(personId), aggregation[personId]));
            }

            return(result);
        }
Ejemplo n.º 4
0
        public static ExpensePayout FromOrganizationAndPerson(int organizationId, int personId)
        {
            ExpenseClaims allExpenseClaims = ExpenseClaims.FromOrganization(Organization.FromIdentity(organizationId));
            ExpenseClaims expenseClaims    = new ExpenseClaims();

            // Aggregate per person

            foreach (ExpenseClaim expense in allExpenseClaims)
            {
                if (expense.ClaimingPersonId == personId)
                {
                    if (expense.Approved && expense.Open)
                    {
                        // Ready for payout

                        expenseClaims.Add(expense);
                    }
                }
            }

            // Create ExpensePayout object

            return(new ExpensePayout(Person.FromIdentity(personId), expenseClaims));
        }
Ejemplo n.º 5
0
 public static ExpenseClaim[] SelectUnapprovedByOrganization(int organizationId)
 {
     return(ExpenseClaims.FromOrganization(Organization.FromIdentity(organizationId)).WhereUnapproved.ToArray());
 }
Ejemplo n.º 6
0
    private void PopulateDebugInfo()
    {
        debugLookup = new Dictionary <int, DebugInfoLine>();

        ExpenseClaims   expenseClaims   = ExpenseClaims.FromOrganization(Organization.PPSE);
        InboundInvoices inboundInvoices = InboundInvoices.ForOrganization(Organization.PPSE);
        Salaries        salaries        = Salaries.ForOrganization(Organization.PPSE);
        Payouts         payouts         = Payouts.ForOrganization(Organization.PPSE);

        debugLookup[Organization.PPSE.FinancialAccounts.DebtsExpenseClaims.Identity]   = new DebugInfoLine();
        debugLookup[Organization.PPSE.FinancialAccounts.DebtsInboundInvoices.Identity] = new DebugInfoLine();
        debugLookup[Organization.PPSE.FinancialAccounts.CostsAllocatedFunds.Identity]  = new DebugInfoLine();
        debugLookup[Organization.PPSE.FinancialAccounts.DebtsSalary.Identity]          = new DebugInfoLine();
        debugLookup[Organization.PPSE.FinancialAccounts.DebtsTax.Identity]             = new DebugInfoLine();

        foreach (Payout payout in payouts)
        {
            foreach (ExpenseClaim claim in payout.DependentExpenseClaims)
            {
                debugLookup[Organization.PPSE.FinancialAccounts.DebtsExpenseClaims.Identity].Payouts -= claim.Amount;
            }

            foreach (InboundInvoice invoice in payout.DependentInvoices)
            {
                debugLookup[Organization.PPSE.FinancialAccounts.DebtsInboundInvoices.Identity].Payouts -= (decimal)invoice.Amount;
            }

            foreach (Salary salary in payout.DependentSalariesNet)
            {
                debugLookup[Organization.PPSE.FinancialAccounts.DebtsSalary.Identity].Payouts -= salary.NetSalaryDecimal;
            }

            foreach (Salary salary in payout.DependentSalariesTax)
            {
                debugLookup[Organization.PPSE.FinancialAccounts.DebtsTax.Identity].Payouts -= salary.TaxTotalDecimal;
            }
        }


        foreach (ExpenseClaim claim in expenseClaims)
        {
            if (claim.Open)
            {
                AddExpenseToDebug(claim);
            }
        }

        foreach (InboundInvoice invoice in inboundInvoices)
        {
            AddInboundInvoiceToDebug(invoice);
        }

        foreach (Salary salary in salaries)
        {
            AddSalaryNetToDebug(salary);
            AddSalaryTaxToDebug(salary);
        }

        List <DebugInfoLine> debugInfoLines = new List <DebugInfoLine>();

        foreach (int accountId in debugLookup.Keys)
        {
            debugLookup[accountId].AccountId = accountId;
            debugLookup[accountId].Actual    = FinancialAccount.FromIdentity(accountId).GetDelta(new DateTime(2006, 1, 1), DateTime.Today.AddDays(2)); // two days to account for all possible time zones
        }

        foreach (DebugInfoLine line in debugLookup.Values)
        {
            debugInfoLines.Add(line);
        }

        this.GridDebug.DataSource = debugInfoLines;
    }