protected void OnDelete(PayrollEmployee item, out string message, ref Action <Entity> afterConfirm)
        {
            if (afterConfirm == null)
            {
                throw new ArgumentNullException(nameof(afterConfirm));
            }

            message = item.EmployeeClass.PersonClass.Name.Fullname;

            afterConfirm = currentItem =>
            {
                try
                {
                    var deletedItem = (PayrollEmployee)currentItem;

                    deletedItem.RowStatus = RecordStatus.DeletedRecord;

                    //Save to Database
                    var dataWriter = new PayrollEmployeeDataWriter(App.CurrentUser.User.Username, deletedItem);
                    dataWriter.SaveChanges();

                    ItemDataCollection.Remove((PayrollEmployee)currentItem);

                    App.LogAction("Payroll", "Deleted Employee : " + deletedItem.EmployeeClass.EmpNum);
                }
                catch (Exception ex)
                {
                    MessageDialog.ShowError(ex, this);
                }
            };
        }
        private bool FileSave()
        {
            Cursor.Current = Cursors.WaitCursor;

            try
            {
                if (!DataIsValid())
                {
                    return(false);
                }


                // Update MANDATORY COMPUTATIONS
                foreach (var emp in ListOfEmployees)
                {
                    emp.Deductions.LoadAllItemsWithDeduction();
                    DeductionGenerator.UpdateMandatoryDeductions(emp);
                    var mandatoryWriter = new PayrollEmployeeDataWriter(App.CurrentUser.User.Username, emp);
                    mandatoryWriter.SaveChanges();
                }


                //ItemData.Id =  ;
                ItemData.PayrollType = "Regular";
                ItemData.DateCovered = dtPeriod.Value;
                ItemData.Remarks     = txtRemarks.Text;


                var generator = new PayrollGenerator();

                pbStatus.Maximum = ListOfEmployees.Count();
                pbStatus.Text    = "";
                pbStatus.Visible = true;

                pbStatus.Refresh();

                generator.Generate(ItemData, ListOfEmployees, OnProgress);


                var writer = new PayrollPeriodDataWriter(App.CurrentUser.User.Username, ItemData);
                writer.SaveChanges();

                App.LogAction("Payroll", "Generated New Payroll :" + dtPeriod.Value.ToString("yyyy MMMM dd"));
                return(true);
            }
            catch (Exception ex)
            {
                MessageDialog.ShowError(ex, this);
                return(false);
            }
        }
        public bool FileSave()
        {
            if (!DataIsValid())
            {
                return(false);
            }


            //ItemData.EmployeeId = record.EmployeeId;
            ItemData.DateHired  = dtDateHired.Value;
            ItemData.Department = cboDepartment.Text;


            ItemData.Tin        = txtTin.Text;
            ItemData.PhilHealth = txtPhilHealth.Text;
            ItemData.PagIbig    = txtPagIbig.Text;
            ItemData.SSS        = txtSSS.Text + "";


            //Position
            var selectedPSG = (PositionSalaryGrade)cboPosition.SelectedItem;

            ItemData.SG            = selectedPSG.SG;
            ItemData.PositionId    = selectedPSG.PositionId;
            ItemData.PositionClass = selectedPSG.PositionClass;


            ItemData.Step = cboStep.SelectedIndex + 1;


            //Tax
            var selectedTax = (Tax)cboTax.SelectedItem;

            ItemData.TaxClass = selectedTax;
            ItemData.TaxId    = selectedTax.Id;


            ItemData.Active = switchActive.Value;



            //Deductions
            //ItemData.Deductions;


            //UPdate BASIC SALARY
            ItemData.UpdateBasicSalary(DateTime.Now);


            if (ItemData.Id != 0)
            {
                ItemData.RowStatus = RecordStatus.ModifiedRecord;
            }

            var writer = new PayrollEmployeeDataWriter(App.CurrentUser.User.Username, ItemData);
            var result = writer.SaveChanges();

            DirtyStatus.Clear();

            DialogResult = DialogResult.OK;
            return(true);
        }