Ejemplo n.º 1
0
        public void default_payment_for_deduction_is_the_amortized_amount()
        {
            var d = Deduction.Create(salary, 3, MonetaryValue.of("php", 1000));
            var p = DeductionPayment.Create(d);

            Assert.Equal(d.AmortizedAmount.DecimalValue(), p.PaidAmount.DecimalValue());
        }
Ejemplo n.º 2
0
        public void deduction_amortization_adjusted_when_custom_payment_was_made()
        {
            var d      = Deduction.Create(salary, 3, MonetaryValue.of("php", 1000));
            var actual = d.AmortizedAmount.DecimalValue();

            var p = DeductionPayment.Create(d, MonetaryValue.of("php", 700));

            Assert.Equal(d.Balance.DecimalValue(), 300);
            Assert.Equal(d.Paid.DecimalValue(), 700);
            Assert.Equal(d.Total.subtractValueOf(d.Paid).DecimalValue(), d.Balance.DecimalValue());
            Assert.Equal(d.AmortizedAmount.DecimalValue(), (1000 - 700) / (3 - 1));
            Assert.NotEqual(d.AmortizedAmount.DecimalValue(), actual);
        }
Ejemplo n.º 3
0
        public TestFixture()
        {
            ISalaryRepository   salary_repository    = new SalaryRepository();
            IEmployeeRepository employees_repository = new EmployeeRepository();

            using (var uow = new NHUnitOfWork()) {
                var e  = Employee.Create(Person.Create("juan", "santos", "puruntong", "", Gender.MALE, Date.Now), Date.Now);
                var s  = Salary.Create(e, MonetaryValue.of("php", 10000));
                var d  = Deduction.Create(s, 3, MonetaryValue.of("php", 5000));
                var da = Deduction.CreateAmortized(s, 12, MonetaryValue.of("php", 200), mode: DeductionMode.CONTINIOUS);
                var db = Deduction.CreateAmortized(s, 12, MonetaryValue.of("php", 300), mode: DeductionMode.CONTINIOUS);
                var dc = Deduction.CreateAmortized(s, 12, MonetaryValue.of("php", 400), mode: DeductionMode.CONTINIOUS);

                var e2  = Employee.Create(Person.Create("juan", "cruz", "dela cruz", "", Gender.MALE, Date.Now), Date.Now);
                var s2  = Salary.Create(e2, MonetaryValue.of("php", 15000));
                var d2  = Deduction.Create(s2, 3, MonetaryValue.of("php", 3000));
                var d2a = Deduction.CreateAmortized(s2, 12, MonetaryValue.of("php", 200), mode: DeductionMode.CONTINIOUS);
                var d2b = Deduction.CreateAmortized(s2, 12, MonetaryValue.of("php", 300), mode: DeductionMode.CONTINIOUS);
                var d2c = Deduction.CreateAmortized(s2, 12, MonetaryValue.of("php", 400), mode: DeductionMode.CONTINIOUS);

                var e3  = Employee.Create(Person.Create("ann", "santos", "cruz", "", Gender.FEMALE, Date.Now), Date.Now);
                var s3  = Salary.Create(e3, MonetaryValue.of("php", 13000));
                var d3  = Deduction.Create(s3, 2, MonetaryValue.of("php", 2000));
                var d3a = Deduction.CreateAmortized(s3, 12, MonetaryValue.of("php", 200), mode: DeductionMode.CONTINIOUS);
                var d3b = Deduction.CreateAmortized(s3, 12, MonetaryValue.of("php", 300), mode: DeductionMode.CONTINIOUS);
                var d3c = Deduction.CreateAmortized(s3, 12, MonetaryValue.of("php", 400), mode: DeductionMode.CONTINIOUS);

                var e4  = Employee.Create(Person.Create("audrey", "yin", "yang", "", Gender.FEMALE, Date.Now), Date.Now);
                var s4  = Salary.Create(e4, MonetaryValue.of("php", 14000));
                var d4  = Deduction.Create(s4, 2, MonetaryValue.of("php", 5000));
                var d4a = Deduction.CreateAmortized(s4, 12, MonetaryValue.of("php", 200), mode: DeductionMode.CONTINIOUS);
                var d4b = Deduction.CreateAmortized(s4, 12, MonetaryValue.of("php", 300), mode: DeductionMode.CONTINIOUS);
                var d4c = Deduction.CreateAmortized(s4, 12, MonetaryValue.of("php", 400), mode: DeductionMode.CONTINIOUS);

                employees_repository.Save(e);
                employees_repository.Save(e2);
                employees_repository.Save(e3);
                employees_repository.Save(e4);
                salary_repository.Save(s);
                salary_repository.Save(s2);
                salary_repository.Save(s3);
                salary_repository.Save(s4);
                uow.Commit();
            }
        }
Ejemplo n.º 4
0
        // TODO: use CQRS Query
        private void onCommandIncludeSalaryDeductionInReport(object sender, Command cmd)
        {
            if (cmd is CommandIncludeSalaryDeductionInReport)
            {
                var args = cmd as CommandIncludeSalaryDeductionInReport;

                if (args.PayrollReport.Equals(this._payroll_report))
                {
                    foreach (var deduction in this._salary.ActiveDeductions)
                    {
                        // because deduction can be whole even if the payroll is half
                        // we include the MonthlyUnit for deduction payment in CQRS command
                        var amount  = deduction.AmortizedAmount.PreciseValue * (decimal)args.MonthlyUnit;
                        var payment = DeductionPayment.Create(deduction, MonetaryValue.of(deduction.MonetaryCode, amount));
                        this._deduction_payments.Add(payment);
                        this._gross_deduction += payment.PaidAmount.PreciseValue;

                        EventBroker.getInstance().Emit(new EventDeductionPaymentIncludedInPayroll(this._payroll_report, payment));
                    }
                }
            }
        }
Ejemplo n.º 5
0
        public void can_get_active_deductions()
        {
            using (var uow = new NHUnitOfWork()) {
                var employee = Employee.Create(Person.Create("a", "a", "a", "", Gender.MALE, Date.Now), Date.Now);
                var salary   = Salary.Create(employee, MonetaryValue.of("PHP", 15000));
                Deduction.Create(salary, 3, MonetaryValue.of("php", 1000));
                Deduction.Create(salary, 3, MonetaryValue.of("php", 2000));
                Deduction.Create(salary, 3, MonetaryValue.of("php", 3000));
                // Deduction.Create(salary, 3, MonetaryValue.of("php", 0));
                EventBroker.getInstance().Command(new CommandAssociateSalaryToEmployee(salary, employee));

                _employees.Save(employee);
                _salaries.Save(salary);
                uow.Commit();
            }

            using (var uow = new NHUnitOfWork()) {
                var ees = _employees.FetchAllActive();
                var ds  = _salaries.FetchEmployeeActiveDeduction(ees[0]);
                Assert.Equal(3, ds.Count);
            }
        }
Ejemplo n.º 6
0
        public void can_add_deduction()
        {
            var d = Deduction.Create(salary, 3, MonetaryValue.of("php", 1000));

            Assert.Contains <Deduction>(d, salary.ActiveDeductions);
        }