Ejemplo n.º 1
0
        public double CalcSalary(Employee employee, DateTime time)
        {
            var wage  = employee.WageRate;
            var span  = time - employee.EmploymentDate;
            int years = span.Days / 365;

            if (years > 0)
            {
                var maxWage = wage * 1.4;
                while (years-- > 0 && wage < maxWage)
                {
                    wage += employee.WageRate * 0.05;
                }
            }

            if (employee.GetDirectSubordinates() != null)
            {
                double subordinateWage = 0;
                foreach (Employee empl in employee.GetDirectSubordinates())
                {
                    subordinateWage += EmployeeSalaryCalculator.GetInstance().CalculateSalary(empl, time);
                }
                wage += subordinateWage * 0.05;
            }

            return(Math.Round(wage, 2));
        }
Ejemplo n.º 2
0
        static void Main(string[] args)
        {
            do
            {
                double totalHoursWorked = GetTotalHoursWorked();

                double hourlyRate = GetHourlyRate();

                string location = GetLocation();

                var calculatorType = GetCalculatorType(location);
                var calculator     = new EmployeeSalaryCalculator(calculatorType);

                var employee = new Employee
                {
                    HoursWorked = totalHoursWorked,
                    HourlyRate  = hourlyRate,
                    Location    = location
                };

                employee.Salary = calculator.CalculateSalary(employee);

                PrintResults(employee);

                Console.WriteLine("Do you want to continue? (y/n)");
            } while (Console.ReadLine() != "n");
        }
Ejemplo n.º 3
0
        private double GetWage(int idx, DateTime wageTime)
        {
            Employee employee = Converter.GetEmployee(EmployeesFromDb[idx]);

            if (employee.EmploymentDate > wageTime)
            {
                throw new Exception("Выберите дату позднее даты трудоустройства сотрудника.");
            }
            string password = PasswordInput != null?PasswordInput() : "";

            // hashes of employee and his/her boss
            List <string> allPossiblePasswordInfos = new List <string>();

            allPossiblePasswordInfos.AddRange(Converter.GetEmployeePasswords(EmployeesFromDb[idx]));
            string adminPswInfo = AdminPasswordReceiver();

            if (adminPswInfo != null)
            {
                allPossiblePasswordInfos.Add(adminPswInfo);
            }

            foreach (string passInfo in allPossiblePasswordInfos)
            {
                if (PasswordChecker?.Invoke(password, passInfo) ?? true)
                {
                    return(EmployeeSalaryCalculator.GetInstance().CalculateSalary(employee, wageTime));
                }
            }
            throw new Exception("У Вас отсутствуют права доступа");
        }
        public void EmployeeSalaryCalculatorShouldReturnExpectedValue()
        {
            double Salary  = 1500;
            var    salEmpl = new EmployeeSalaryCalculator();
            var    actual  = salEmpl.Calculate(Salary);

            Assert.AreEqual(1500 + 300, actual);
        }
Ejemplo n.º 5
0
        public void SocialSecurityShouldBeProperlyDeductedForItalyEmployees()
        {
            var employee = new Employee {
                HourlyRate = 1, HoursWorked = 1, Location = "italy"
            };
            var salaryCalculator = new EmployeeSalaryCalculator(new ItalaySalaryCalculator());
            var salary           = salaryCalculator.CalculateSalary(employee);

            Assert.AreEqual(salary.Deduction.SocialSecurityContribution, 0.0919);
        }
Ejemplo n.º 6
0
        public void IncomeTaxShouldBeProperlyDeductedForItalyEmployees()
        {
            var employee = new Employee {
                HourlyRate = 1, HoursWorked = 1, Location = "italy"
            };
            var salaryCalculator = new EmployeeSalaryCalculator(new ItalaySalaryCalculator());
            var salary           = salaryCalculator.CalculateSalary(employee);

            Assert.AreEqual(salary.Deduction.IncomeTax, 0.25);
        }
Ejemplo n.º 7
0
        public void CompulsoryPensionShouldBeProperlyDeductedForIrelandEmployees()
        {
            var employee = new Employee {
                HourlyRate = 1, HoursWorked = 1, Location = "ireland"
            };
            var salaryCalculator = new EmployeeSalaryCalculator(new IrelandSalaryCalculator());
            var salary           = salaryCalculator.CalculateSalary(employee);

            Assert.AreEqual(salary.Deduction.Pension, 0.04);
        }
Ejemplo n.º 8
0
        public void UniversalChargeShouldBeProperlyDeductedForIrelandEmployeesWhenSalaryIsMore()
        {
            var employee = new Employee {
                HourlyRate = 100, HoursWorked = 10, Location = "ireland"
            };
            var salaryCalculator = new EmployeeSalaryCalculator(new IrelandSalaryCalculator());
            var salary           = salaryCalculator.CalculateSalary(employee);

            Assert.AreEqual(salary.Deduction.UniversalSocialCharge, 75);
        }
Ejemplo n.º 9
0
        public void PensionShouldBeProperlyDeductedForGermanyEmployees()
        {
            var employee = new Employee {
                HourlyRate = 1, HoursWorked = 1, Location = "germany"
            };
            var salaryCalculator = new EmployeeSalaryCalculator(new GermanySalaryCalculator());
            var salary           = salaryCalculator.CalculateSalary(employee);

            Assert.AreEqual(salary.Deduction.Pension, 0.02);
        }
Ejemplo n.º 10
0
        public void IncomeTaxShouldBeProperlyDeductedForGermanyEmployeesIfSalaryIsMore()
        {
            var employee = new Employee {
                HourlyRate = 100, HoursWorked = 10, Location = "germany"
            };
            var salaryCalculator = new EmployeeSalaryCalculator(new GermanySalaryCalculator());
            var salary           = salaryCalculator.CalculateSalary(employee);

            Assert.AreEqual(salary.Deduction.IncomeTax, 292);
        }
Ejemplo n.º 11
0
        public void SalaryShouldBeProperlyCalculatedForIrelandEmployees()
        {
            var employee = new Employee {
                HourlyRate = 10, HoursWorked = 1, Location = "ireland"
            };
            var salaryCalculator = new EmployeeSalaryCalculator(new IrelandSalaryCalculator());
            var salary           = salaryCalculator.CalculateSalary(employee);

            Assert.AreEqual(salary.GrossSalary, 10);
        }
Ejemplo n.º 12
0
        public void PermanentContract__SalaryGross_eq_and_CopyrightLawsPercent_eq__Tax_eq(
            decimal salaryGross,
            float copyrightLawsPercent,
            decimal expectedValue)
        {
            // arrange
            var builder    = new EmployeeSalaryCalculationResultBuilder();
            var calculator = new EmployeeSalaryCalculator(builder);

            var context = new EmployeeSalaryCalculationContext();

            context.Parameters.SocialInsuranceSetting           = EmployeeExampleValues.SocialInsuranceSetting;
            context.Parameters.HealthInsuranceSetting           = EmployeeExampleValues.HealthInsuranceSetting;
            context.Parameters.EmploymentRelationshipTaxSetting = EmployeeExampleValues.EmploymentRelationshipTaxSetting;

            // act
            var calculationResult = calculator.Calculate(salaryGross, copyrightLawsPercent, context);

            // assert
            calculationResult.Tax.Should().Be(expectedValue);
        }
Ejemplo n.º 13
0
        static void Main(string[] args)
        {
            var builder         = new EmployeeSalaryCalculationResultBuilder();
            var calculator      = new EmployeeSalaryCalculator(builder);
            var consoleReporter = new PermanentContractSalaryCalculationConsoleReporter();

            var context = new EmployeeSalaryCalculationContext
            {
                Parameters = new EmployeeParameters
                {
                    SocialInsuranceSetting           = EmployeeExampleValues.SocialInsuranceSetting,
                    EmploymentRelationshipTaxSetting = EmployeeExampleValues.EmploymentRelationshipTaxSetting,
                    HealthInsuranceSetting           = EmployeeExampleValues.HealthInsuranceSetting
                }
            };

            var calculationResult = calculator.Calculate(13000m, 80f, context);

            consoleReporter.Report(calculationResult, context);

            Console.WriteLine("Wcisnij <ENTER> aby zakonczyc");
            Console.ReadLine();
        }
Ejemplo n.º 14
0
        private double GetCompanyWage(DateTime wageTime)
        {
            string password = PasswordInput != null?PasswordInput() : "";

            if (password.Length > 0)
            {
                if (PasswordChecker(password, AdminPasswordReceiver()))
                {
                    double overallSalary = 0;
                    foreach (CompanyEmployee employee in Context.CompanyEmployees.Local)
                    {
                        if (employee.EmploymentDate > wageTime)
                        {
                            continue;
                        }
                        Employee e = Converter.GetEmployee(employee);
                        overallSalary += EmployeeSalaryCalculator.GetInstance().CalculateSalary(e, wageTime);
                    }
                    return(overallSalary);
                }
            }
            throw new Exception("У Вас отсутствуют права доступа");
        }