Commit 942f18c

mo <email@solidware.ca>
2011-03-31 04:14:29
add alberta province tax calculation.
1 parent 42304e1
product/desktop.ui/model/FederalTaxes.cs
@@ -1,29 +0,0 @@
-using utility;
-
-namespace solidware.financials.windows.ui.model
-{
-    public class FederalTaxes
-    {
-        public decimal CalculateFederalTaxesFor(decimal totalIncome)
-        {
-            var taxes = 0m;
-            if (totalIncome <= 41544.00m)
-            {
-                taxes = totalIncome.subtract(0m).multiply_by(0.15m).add(0m);
-            }
-            if (totalIncome > 41544.00m && totalIncome <= 83088.00m)
-            {
-                taxes = ((totalIncome - 41544m)*0.22m) + 6232m;
-            }
-            if (totalIncome > 83088.00m && totalIncome <= 128800.00m)
-            {
-                taxes = ((totalIncome - 83088m)*0.26m) + 15371m;
-            }
-            if (totalIncome > 128800.00m)
-            {
-                taxes = ((totalIncome - 128800m)*0.29m) + 27256m;
-            }
-            return taxes;
-        }
-    }
-}
\ No newline at end of file
product/desktop.ui/model/TaxesForIndividual.cs
@@ -6,21 +6,24 @@ namespace solidware.financials.windows.ui.model
 {
     public class TaxesForIndividual : ObservablePresenter<TaxesForIndividual>
     {
-        public TaxesForIndividual(Guid id, FederalTaxesViewModel federalTaxes)
+        public TaxesForIndividual(Guid id, FederalTaxesViewModel federalTaxes, ProvincialTaxesViewModel provincialTaxes)
         {
             Id = id;
             Income = Money.Null;
             FederalTaxes = federalTaxes;
+            ProvincialTaxes = provincialTaxes;
         }
 
         public Guid Id { get; private set; }
         public Observable<Money> Income { get; private set; }
         public FederalTaxesViewModel FederalTaxes { get; set; }
+        public ProvincialTaxesViewModel ProvincialTaxes { get; set; }
 
         public void AddIncome(decimal amount)
         {
             Income.Value += amount;
             FederalTaxes.ApplyTaxesTo(Income.Value);
+            ProvincialTaxes.ApplyTaxesTo(Income.Value);
         }
     }
 }
\ No newline at end of file
product/desktop.ui/presenters/FederalTaxesViewModel.cs
@@ -1,5 +1,6 @@
 using System;
-using solidware.financials.windows.ui.model;
+using solidware.financials.windows.ui.views.controls;
+using utility;
 
 namespace solidware.financials.windows.ui.presenters
 {
@@ -12,11 +13,33 @@ namespace solidware.financials.windows.ui.presenters
         }
 
         public Guid Id { get; private set; }
-        public views.controls.Observable<Money> Taxes { get; set; }
+        public Observable<Money> Taxes { get; set; }
 
         public void ApplyTaxesTo(Money totalIncome)
         {
-            Taxes.Value = new FederalTaxes().CalculateFederalTaxesFor(totalIncome);
+            Taxes.Value = CalculateFederalTaxesFor(totalIncome);
+        }
+
+        public decimal CalculateFederalTaxesFor(decimal totalIncome)
+        {
+            var taxes = 0m;
+            if (totalIncome <= 41544.00m)
+            {
+                taxes = totalIncome.subtract(0m).multiply_by(0.15m).add(0m);
+            }
+            if (totalIncome > 41544.00m && totalIncome <= 83088.00m)
+            {
+                taxes = ((totalIncome - 41544m)*0.22m) + 6232m;
+            }
+            if (totalIncome > 83088.00m && totalIncome <= 128800.00m)
+            {
+                taxes = ((totalIncome - 83088m)*0.26m) + 15371m;
+            }
+            if (totalIncome > 128800.00m)
+            {
+                taxes = ((totalIncome - 128800m)*0.29m) + 27256m;
+            }
+            return taxes;
         }
     }
 }
\ No newline at end of file
product/desktop.ui/presenters/ProvincialTaxesViewModel.cs
@@ -0,0 +1,28 @@
+using System;
+using solidware.financials.windows.ui.views.controls;
+using utility;
+
+namespace solidware.financials.windows.ui.presenters
+{
+    public class ProvincialTaxesViewModel : ObservablePresenter<FederalTaxesViewModel>
+    {
+        public ProvincialTaxesViewModel(Guid id)
+        {
+            Id = id;
+            Taxes = Money.Null;
+        }
+
+        public Guid Id { get; private set; }
+        public Observable<Money> Taxes { get; set; }
+
+        public void ApplyTaxesTo(Money totalIncome)
+        {
+            Taxes.Value = CalculateFederalTaxesFor(totalIncome);
+        }
+
+        public decimal CalculateFederalTaxesFor(decimal totalIncome)
+        {
+            return totalIncome.multiply_by(0.10m);
+        }
+    }
+}
\ No newline at end of file
product/desktop.ui/presenters/TaxesForFamily.cs
@@ -11,16 +11,18 @@ namespace solidware.financials.windows.ui.presenters
         public TaxesForFamily()
         {
             Income = Money.Null;
+            ProvincialTaxes = Money.Null;
             FederalTaxes = Money.Null;
         }
 
         public Observable<Money> Income { get; set; }
+        public Observable<Money> ProvincialTaxes { get; set; }
         public Observable<Money> FederalTaxes { get; set; }
 
         public TaxesForIndividual TaxesFor(Guid id)
         {
             if (!family.ContainsKey(id))
-                family[id] = new TaxesForIndividual(id, new FederalTaxesViewModel(id));
+                family[id] = new TaxesForIndividual(id, new FederalTaxesViewModel(id), new ProvincialTaxesViewModel(id));
             return family[id];
         }
 
@@ -28,6 +30,7 @@ namespace solidware.financials.windows.ui.presenters
         {
             TaxesFor(personId).AddIncome(amount);
             Income.Value = family.Values.Sum(x => x.Income.Value);
+            ProvincialTaxes.Value = family.Values.Sum(x => x.ProvincialTaxes.Taxes.Value);
             FederalTaxes.Value = family.Values.Sum(x => x.FederalTaxes.Taxes.Value);
         }
 
product/desktop.ui/views/TaxSummaryTab.xaml
@@ -21,7 +21,7 @@
             <StackPanel Width="500">
                 <DockPanel>
                     <Label Width="100">Individual:</Label>
-                    <Label Content="{Binding Path=Individual.FederalTaxes.Taxes.Value}" ContentStringFormat="{}{0:C}" FontWeight="Bold"/>
+                    <Label Content="{Binding Path=Individual.FederalTaxes.Taxes.Value}" FontWeight="Bold"/>
                 </DockPanel>
                 <DockPanel>
                     <Label Width="100">Family:</Label>
@@ -40,8 +40,16 @@
                 </Expander>
             </StackPanel>
             </GroupBox>
-            <StackPanel Margin="5,5,5,5" Width="500">
-                <Label FontWeight="Bold">Provincial Taxes</Label>
+            <GroupBox Header="Provincial Taxes" Margin="5,5,5,5">
+            <StackPanel Width="500">
+                <DockPanel>
+                    <Label Width="100">Individual:</Label>
+                    <Label Content="{Binding Path=Individual.ProvincialTaxes.Taxes.Value}" FontWeight="Bold"/>
+                </DockPanel>
+                <DockPanel>
+                    <Label Width="100">Family:</Label>
+                    <Label Content="{Binding Path=Family.ProvincialTaxes.Value}" FontWeight="Bold" Foreground="Red" />
+                </DockPanel>
                 <Expander Header="Provincial Tax Rates">
                     <StackPanel>
                     <Label FontSize="10" FontWeight="Bold">Provincial Tax Rates for 2011</Label>
@@ -50,12 +58,9 @@
                     </ListView>
                     </StackPanel>
                 </Expander>
-                <DockPanel>
-                    <Label Width="100">Individual:</Label>
-                    <Label Content="{Binding Path=Individual.ProvincialTaxes}" FontWeight="Bold"/>
-                </DockPanel>
             </StackPanel>
+            </GroupBox>
             </DockPanel>
         </StackPanel>
     </DockPanel>
-</UserControl>
+</UserControl>
\ No newline at end of file
product/desktop.ui/solidware.financials.csproj
@@ -123,7 +123,6 @@
     <Compile Include="handlers\PublishEventHandler.cs" />
     <Compile Include="InMemoryApplicationState.cs" />
     <Compile Include="IObservableCommand.cs" />
-    <Compile Include="model\FederalTaxes.cs" />
     <Compile Include="model\TaxesForIndividual.cs" />
     <Compile Include="model\TaxRow.cs" />
     <Compile Include="ObservablePresenter.cs" />
@@ -136,6 +135,7 @@
     <Compile Include="model\PersonDetails.cs" />
     <Compile Include="presenters\FederalTaxesViewModel.cs" />
     <Compile Include="presenters\Money.cs" />
+    <Compile Include="presenters\ProvincialTaxesViewModel.cs" />
     <Compile Include="presenters\specifications\IfFamilyMemberIsSelected.cs" />
     <Compile Include="presenters\ButtonBarPresenter.cs" />
     <Compile Include="presenters\TaxesForFamily.cs" />