public async Task <(bool, string)> EditCustomWorkerFieldAsync(EditCustomWorkerFieldModel editCustomWorkerFieldModel)
        {
            if (_globalVariable.IsCompanySelected)
            {
                CustomWorkerField customWorkerField = await _context.CustomWorkerFields.SingleOrDefaultAsync(x => x.Id == editCustomWorkerFieldModel.Id);

                if (customWorkerField != null)
                {
                    if (await customWorkerFieldExistsForCompanyAsync(_globalVariable.SelectedCompanyId, editCustomWorkerFieldModel.Name) && !editCustomWorkerFieldModel.Name.Equals(customWorkerField.Name))
                    {
                        return(false, "Field already exists.");
                    }

                    customWorkerField.Name       = editCustomWorkerFieldModel.Name;
                    customWorkerField.IsRequired = editCustomWorkerFieldModel.IsRequired;
                    _context.CustomWorkerFields.Update(customWorkerField);
                    await _context.SaveChangesAsync();

                    return(true, "Updated.");
                }
                else
                {
                    return(false, "Id not found.");
                }
            }
            else
            {
                return(false, "Company not selected.");
            }
        }
        public async Task <(bool, string)> AddWorkerAsync(AddWorkerModel addWorkerModel)
        {
            if (_globalVariable.IsCompanySelected)
            {
                Worker worker = new Worker()
                {
                    FirstName            = addWorkerModel.FirstName,
                    LastName             = addWorkerModel.LastName,
                    DateOfBirth          = addWorkerModel.BirthDate,
                    CreationDate         = DateTime.Now,
                    IdentificationNumber = addWorkerModel.IdentificationNumber,
                };

                worker.Company = await _companyService.GetSelectedCompanyAsync();

                _context.Workers.Add(worker);
                await _context.SaveChangesAsync();

                foreach (var item in addWorkerModel.CustomFieldValues)
                {
                    CustomWorkerField customWorkerField = await GetCustomWorkerFieldByIdAsync(item.FieldId);

                    CustomWorkerFieldValue customWorkerFieldValue = new CustomWorkerFieldValue(customWorkerField, worker, item.Value);

                    _context.CustomWorkerFieldValues.Add(customWorkerFieldValue);
                    await _context.SaveChangesAsync();
                }

                return(true, "Worker Added.");
            }
            else
            {
                return(false, "Company not selected.");
            }
        }
        public async Task <(bool, string)> DeleteCustomWorkerFieldAsync(int id)
        {
            if (_globalVariable.IsCompanySelected)
            {
                CustomWorkerField customWorkerField = await _context.CustomWorkerFields.SingleOrDefaultAsync(x => x.Id == id);

                if (customWorkerField != null)
                {
                    _context.CustomWorkerFieldValues.RemoveRange(_context.CustomWorkerFieldValues.Where(x => x.CustomWorkerField.Id == customWorkerField.Id));

                    _context.CustomWorkerFields.Remove(customWorkerField);
                    await _context.SaveChangesAsync();

                    return(true, "Removed");
                }
                else
                {
                    return(false, "Id not found.");
                }
            }
            else
            {
                return(false, "Company not selected.");
            }
        }
        public async Task <(bool, string)> EditWorkerAsync(EditWorkerModel editWorkerModel)
        {
            if (_globalVariable.IsCompanySelected)
            {
                Worker worker = await _context.Workers.SingleOrDefaultAsync(x => x.Id == editWorkerModel.Id);

                if (worker != null)
                {
                    worker.IdentificationNumber = editWorkerModel.IdentificationNumber;
                    worker.FirstName            = editWorkerModel.FirstName;
                    worker.DateOfBirth          = editWorkerModel.BirthDate;

                    _context.Workers.Update(worker);

                    for (int i = 0; i < editWorkerModel.CustomFieldValues.Count; i++)
                    {
                        CustomWorkerFieldValue customWorkerFieldValue = _context.CustomWorkerFieldValues.SingleOrDefault(x => x.CustomWorkerField.Id == editWorkerModel.CustomFieldValues[i].FieldId && x.Worker.Id == worker.Id);

                        if (customWorkerFieldValue != null)
                        {
                            customWorkerFieldValue.Value = editWorkerModel.CustomFieldValues[i].Value;
                            _context.Update(customWorkerFieldValue);
                        }
                        else
                        {
                            CustomWorkerField customWorkerField = await GetCustomWorkerFieldByIdAsync(editWorkerModel.CustomFieldValues[i].FieldId);

                            customWorkerFieldValue = new CustomWorkerFieldValue(customWorkerField, worker, editWorkerModel.CustomFieldValues[i].Value);

                            _context.CustomWorkerFieldValues.Add(customWorkerFieldValue);
                            await _context.SaveChangesAsync();
                        }
                    }
                    await _context.SaveChangesAsync();

                    return(true, "Updated");
                }
                else
                {
                    return(false, "Id's don't match.");
                }
            }
            else
            {
                return(false, "Company not selected.");
            }
        }
        private async Task <bool> customWorkerFieldExistsForCompanyAsync(int companyId, string fieldName)
        {
            if (companyId != 0)
            {
                CustomWorkerField customWorkerField = await _context.CustomWorkerFields.SingleOrDefaultAsync(x => x.Company.Id == companyId && x.Name.Equals(fieldName));

                if (customWorkerField != null)
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            else
            {
                return(false);
            }
        }
        public async Task <(bool, string)> AddCustomWorkerFieldAsync(string name, bool isRequired)
        {
            if (_globalVariable.IsCompanySelected)
            {
                if (await customWorkerFieldExistsForCompanyAsync(_globalVariable.SelectedCompanyId, name))
                {
                    return(false, "Field already exists.");
                }

                CustomWorkerField customWorkerField = new CustomWorkerField();
                customWorkerField.Name       = name;
                customWorkerField.IsRequired = isRequired;
                customWorkerField.Company    = await _context.Companies.SingleOrDefaultAsync(x => x.Id == _globalVariable.SelectedCompanyId);

                _context.CustomWorkerFields.Add(customWorkerField);
                await _context.SaveChangesAsync();

                return(true, "Added");
            }
            else
            {
                return(false, "Company is not selected.");
            }
        }