// Кнопка "Добавить отпуск"
        private void SaveButton_Click(object sender, RoutedEventArgs e)
        {
            if (!ValidateFields())
            {
                return;
            }

            bool result;

            if (_vacationId != -1) // Если это режим редактирования отпуска
            {
                var vacation = new VacationData
                {
                    Id        = _vacationId,
                    Name      = VacationNameTextBox.Text,
                    StartDate = DateTime.Parse(StartDatePicker.Text),
                    EndDate   = DateTime.Parse(EndDatePicker.Text)
                };

                result = GlobalStaticParameters.Database.SaveVacation(vacation);
            }
            else
            {
                // Добавляем отпуск
                result = GlobalStaticParameters.Database.AddNewVacation(
                    VacationNameTextBox.Text,
                    DateTime.Parse(StartDatePicker.Text),
                    DateTime.Parse(EndDatePicker.Text),
                    _employeeId);
            }

            if (result)
            {
                this.Close();
            }
        }
 public VacationController(ApplicationDbContext context)
 {
     _repository = new VacationData(context);
 }
        public List <VacationData> CalcEmpVactionPerRquest(decimal EmpSerial_No, string Company_Id, string Branch_Id, string FromDate, string ToDate)
        {
            StackFrame stackFrame = new StackFrame();
            MethodBase methodBase = stackFrame.GetMethod();

            try
            {
                OpenEntityConnection();


                List <VacationData> objectList = new List <VacationData>();


                object[] param1 =
                {
                    new SqlParameter("@Company_Id",    Company_Id),
                    new SqlParameter("@Branch_Id",     Branch_Id),
                    new SqlParameter("@Emp_Serial_No", EmpSerial_No),
                    new SqlParameter("@FromDate",      FromDate),
                };
                object[] param2 =
                {
                    new SqlParameter("@Company_Id", Company_Id),
                    new SqlParameter("@Branch_Id",  Branch_Id),
                    new SqlParameter("@FromDate",   FromDate),
                    new SqlParameter("@ToDate",     ToDate),
                };

                var objlist = objPharmaEntities.Database.SqlQuery <VacationData>("exec dbo.CalcEmpAnnualVactionPerRquest @Company_Id,@Branch_Id,@Emp_Serial_No,@FromDate", param1).ToList();
                var balance = objPharmaEntities.Database.SqlQuery <decimal>("select  dbo.Fn_get_OfficalVacation(@Company_Id,'@Branch_Id',@FromDate,@ToDate)", param2).FirstOrDefault();
                foreach (var obj in objlist)
                {
                    VacationData VacationData = new VacationData();

                    VacationData.Company_Id             = obj.Company_Id;
                    VacationData.Branch_Id              = obj.Branch_Id;
                    VacationData.Emp_Serial_No          = obj.Emp_Serial_No;
                    VacationData.AllowedVacationBal_Col = obj.AllowedVacationBal_Col;
                    VacationData.Net_NoOfActuallyVacationDaysTillDate_Col = obj.Net_NoOfActuallyVacationDaysTillDate_Col;
                    VacationData.NewTransferedAfterFinishingContract_Col  = obj.NewTransferedAfterFinishingContract_Col;
                    VacationData.NoOfPerviousAnnaulVacTillDate_Col        = obj.NoOfPerviousAnnaulVacTillDate_Col;
                    VacationData.NoOfActuallyVacationDaysTillDate_Col     = obj.NoOfActuallyVacationDaysTillDate_Col;
                    VacationData.OfficialVacations    = obj.OfficialVacations;
                    VacationData.VactionFromPrmEffect = obj.VactionFromPrmEffect;
                    VacationData.NoOfTransferAnnaulVacTillDate_Col = obj.NoOfTransferAnnaulVacTillDate_Col;
                    VacationData.TotalAvailable    = (obj.AllowedVacationBal_Col + obj.NoOfTransferAnnaulVacTillDate_Col);
                    VacationData.RemainBalance     = Convert.ToDecimal(balance);
                    VacationData.FromStartPeriod   = obj.FromStartPeriod;
                    VacationData.ToEndPeriod       = obj.ToEndPeriod;
                    VacationData.Contract_Id       = obj.Contract_Id;
                    VacationData.ContractPeriod_Id = obj.ContractPeriod_Id;



                    objectList.Add(VacationData);
                }



                return(objectList);
            }
            catch (Exception ex)
            {
                catchEntityvalidation((System.Data.Entity.Validation.DbEntityValidationException)ex, System.Runtime.InteropServices.Marshal.GetExceptionCode().ToString(),
                                      this.UserNameProperty.ToString(), this.GetType().Name.ToString(), methodBase.Name.ToString());
                ex.InnerException.Message.ToString();
                return(null);
            }
            finally
            {
                CloseEntityConnection();
            }
        }
        public Task <ResponseViewModel <List <VacationDataViewModel> > > UpdateVacationAsync(List <VacationDataViewModel> vacations, LoginViewModel loggedUser)
        {
            return(Task.Factory.StartNew(() =>
            {
                var response = new ResponseViewModel <List <VacationDataViewModel> >();
                var vacationToUpdate = new VacationData();

                response = _validator.IsValidForUpdate(vacations, loggedUser);
                if (!response.Success)
                {
                    return response;
                }
                try
                {
                    foreach (var vacation in vacations)
                    {
                        //Check if data is for insert of update
                        var vacationDB = _context.VacationData
                                         .SingleOrDefault(c => c.VacationDate == vacation.CalendarDate && c.UserID == vacation.UserID);

                        if (vacationDB == null && vacation.Id == default(int))
                        {
                            var dataForInsert = VacationDataMapper(vacation);
                            _context.VacationData.Add(dataForInsert);
                        }
                        else
                        {
                            //Check if vacation record is deleted meanwhile
                            vacationToUpdate = _context.VacationData
                                               .SingleOrDefault(c => c.ID == vacation.Id);

                            if (vacationToUpdate == null)
                            {
                                throw new Exception("The vacation was deleted by another user. Click again for insert!");
                            }

                            // throws concurrency exception on save changes if item is already modified by another request
                            _context.Entry(vacationToUpdate).Property("RowVersion").OriginalValue = vacation.RowVersion;

                            //change values for update
                            vacationToUpdate.VacationTypeID = vacation.VacationTypeID;
                            _context.Update(vacationToUpdate).State = EntityState.Modified;
                        }
                    }

                    _context.SaveChanges();
                }
                catch (DbUpdateConcurrencyException ex)
                {
                    string errorMessage;
                    var exceptionEntry = ex.Entries.First();
                    var clientValues = (VacationData)exceptionEntry.Entity;
                    var databaseEntry = exceptionEntry.GetDatabaseValues();

                    if (databaseEntry == null)
                    {
                        errorMessage = "The vacation was deleted by another user. Click again for insert!";
                    }
                    else
                    {
                        var databaseValues = (VacationData)databaseEntry.ToObject();
                        if (databaseValues.VacationTypeID != clientValues.VacationTypeID)
                        {
                            errorMessage = "The Vacation Type is changed by another user! Click again for update!";
                        }
                        else
                        {
                            errorMessage = "Some data changed meanwhile! Click again for update!";
                        }
                    }

                    _context.Entry(vacationToUpdate).State = EntityState.Detached;

                    response.Success = false;
                    response.ResponseMessages.Add(ApplicationConstants.UPDATE_ERROR + " - " + errorMessage);
                    response.ReturnedObject = GetVacationForUser(vacations.FirstOrDefault().CalendarDate.Year,
                                                                 vacations.FirstOrDefault().CalendarDate.Month,
                                                                 null,
                                                                 vacations.FirstOrDefault().UserID);
                }
                catch (Exception e)
                {
                    response.Success = false;
                    response.ResponseMessages.Add(ApplicationConstants.UPDATE_ERROR + " - " + e.Message);
                    response.ReturnedObject = GetVacationForUser(vacations.FirstOrDefault().CalendarDate.Year,
                                                                 vacations.FirstOrDefault().CalendarDate.Month,
                                                                 null,
                                                                 vacations.FirstOrDefault().UserID);
                    return response;
                }
                response.Success = true;
                response.ResponseMessages.Add(ApplicationConstants.UPDATE_SUCCESS);
                response.ReturnedObject = GetVacationForUser(vacations.FirstOrDefault().CalendarDate.Year,
                                                             vacations.FirstOrDefault().CalendarDate.Month,
                                                             null,
                                                             vacations.FirstOrDefault().UserID);
                return response;
            }));
        }