예제 #1
0
        public SaveResponse Create(IUnitOfWork uow, SaveRequest <MyRow> request)
        {
            var DateEndR    = request.Entity.DateEnd.Value;
            var DateBeginnR = request.Entity.DateBeginn.Value;

            List <int?> usersid = uow.Connection.List <UserRow>().Where(x => x.IsActive == 1 && x.UserId != 1).Select(x => x.UserId).ToList();

            foreach (var item in usersid) //1
            {
                BalanceAccountRow employee = new BalanceAccountRow();
                employee.User_ID    = item;
                employee.BaseSalary = uow.Connection.List <MyRow>().OrderByDescending(x => x.Id).FirstOrDefault(x => x.User_ID == item).BaseSalary;
                employee.DateEnd    = request.Entity.DateEnd;
                employee.DateBeginn = request.Entity.DateBeginn;


                #region Allowances

                bool UserExistanceAllowances = uow.Connection.List <AllowancesRow>().Any(x => x.UserId == item.Value);
                var  AllowancList            = uow.Connection.List <AllowancesRow>().Where(x => x.UserId == item.Value).ToList();


                if (UserExistanceAllowances == true)
                {
                    decimal?Allowanc = uow.Connection.List <AllowancesRow>().Where(x => x.UserId == item.Value).Select(x => x.Allowance).Sum();
                    employee.GrossSalary = employee.BaseSalary + Allowanc;
                }
                else
                {
                    employee.GrossSalary = employee.BaseSalary;
                }

                #endregion


                #region BasicInsurances

                bool UserExistanceinsurances = uow.Connection.List <BasicInsurancesRow>().Any(x => x.UserId == item.Value);

                if (UserExistanceinsurances == true)
                {
                    decimal?insurancesQ = uow.Connection.List <BasicInsurancesRow>().Where(x => x.UserId == item.Value).Select(x => x.InsurancesQ).Sum();
                    employee.NetIncome = employee.GrossSalary - insurancesQ;
                }

                else
                {
                    employee.NetIncome = employee.GrossSalary;
                }


                #endregion


                #region Installments

                List <InstallmentsRow> installmentValues = uow.Connection.List <InstallmentsRow>().Where(
                    x => x.UserId == item && x.IsAccepted == IsAcceptedEnum.Accepted).ToList();

                foreach (var install in installmentValues)
                {
                    var InstallmentDate = install.InstallmentDate.Value;


                    if (InstallmentDate.Ticks >= DateBeginnR.Ticks && InstallmentDate.Ticks <= DateEndR.Ticks)
                    {
                        employee.NetIncome -= install.InstallmentValues;
                    }
                }

                #endregion


                #region Deductions

                //var BalanceAccount = uow.Connection.List<MyRow>().OrderByDescending(x => x.Id).FirstOrDefault(x => x.User_ID == item);
                //var Deduction = uow.Connection.List<DeductionsRow>().FirstOrDefault(x => x.UserId == item.Value && x.DeductionsDate.Value.Month == BalanceAccount.DateEnd.Value.Month);
                var DeductionsList = uow.Connection.List <DeductionsRow>().Where(x => x.UserId == item.Value).ToList();

                foreach (var Ded in DeductionsList)
                {
                    var DeductionsDate = Ded.DeductionsDate.Value;

                    if (DeductionsDate.Ticks >= DateBeginnR.Ticks && DeductionsDate.Ticks <= DateEndR.Ticks)
                    {
                        employee.NetIncome -= Ded.Deduction;
                    }
                }

                #endregion


                #region Entitlements

                var EntitlementsList = uow.Connection.List <EntitlementsRow>().Where(x => x.UserId == item.Value).ToList();

                foreach (var Ent in EntitlementsList)
                {
                    var EntitlementsDate = Ent.EntitlementsDate.Value;

                    if (EntitlementsDate.Ticks >= DateBeginnR.Ticks && EntitlementsDate.Ticks <= DateEndR.Ticks)
                    {
                        employee.NetIncome   += Ent.Entitlement;
                        employee.GrossSalary += Ent.Entitlement;
                    }
                }

                #endregion


                #region Premiums


                if (uow.Connection.List <PremiumsRow>().Any(x => x.UserId == item))
                {
                    var PremiumsRow = uow.Connection.List <PremiumsRow>().Where(x => x.UserId == item).ToList();

                    foreach (var premiums in PremiumsRow)
                    {
                        var PermData = premiums.PremiumDate.Value;


                        if (PermData.Ticks >= DateBeginnR.Ticks && PermData.Ticks <= DateEndR.Ticks)
                        {
                            employee.BaseSalary  += premiums.PremiumQuantity;
                            employee.GrossSalary += premiums.PremiumQuantity;
                            employee.NetIncome   += premiums.PremiumQuantity;
                        }
                        else
                        {
                            // L2n el base kda kda mtzwd l2ny wa5d a5r base
                            employee.GrossSalary += premiums.PremiumQuantity;
                            employee.NetIncome   += premiums.PremiumQuantity;
                        }
                    }
                }


                #endregion

                uow.Connection.Insert <MyRow>(employee);
            }

            return(new SaveResponse());
        }
예제 #2
0
        public SaveResponse Create(IUnitOfWork uow, SaveRequest <MyRow> request)
        {
            //request.Entity.Status = 1;
            var userid = new MyRepository().Create(uow, request).EntityId.ToString();

            BalanceAccountRow balance   = new BalanceAccountRow();
            EmploeesStatusRow statusRow = new EmploeesStatusRow();

            balance.User_ID     = int.Parse(userid);
            balance.BaseSalary  = request.Entity.Balance;
            balance.GrossSalary = request.Entity.Balance;
            balance.NetIncome   = request.Entity.Balance;
            balance.DateEnd     = DateTime.Now;

            foreach (var item in request.Entity.AlowancesList)
            {
                item.UserId        = int.Parse(userid);
                item.AllowanceDate = DateTime.Now;

                balance.GrossSalary += item.Allowance; //3200
                balance.NetIncome   += item.Allowance; //3200
            }

            foreach (var item in request.Entity.InsuranceList)
            {
                item.UserId        = int.Parse(userid);
                item.InsuranceDate = DateTime.Now;

                /*balance.NetIncome = balance.GrossSalary;*/ //3200 -50
                balance.NetIncome -= item.InsurancesQ;
            }

            #region UserVacanciesLimit


            var VacancationsLimitR = request.Entity.UserVacanciesLimit;
            if (VacancationsLimitR.Count != 0)
            {
                int VacancationsLimitR_Distinct_count = VacancationsLimitR.Select(x => x.VacancyId).Distinct().Count();
                int VacancationsLimitR_Count          = VacancationsLimitR.Select(x => x.VacancyId).Count();

                if (VacancationsLimitR_Distinct_count == VacancationsLimitR_Count)
                {
                    foreach (var item in VacancationsLimitR)
                    {
                        item.UserId = int.Parse(userid);
                    }
                }
                else
                {
                    throw new Exception("Sorry You cannot Enter more than one Vaction Limit");
                }
            }

            #endregion



            statusRow.UserId             = int.Parse(userid);
            statusRow.EmploymentStatusID = 1; //Active in employmentStatus
            statusRow.EmpSDate           = DateTime.Now;
            uow.Connection.Insert <EmploeesStatusRow>(statusRow);

            uow.Connection.Insert <BalanceAccountRow>(balance);

            return(new SaveResponse());
        }