Beispiel #1
0
        public void AddEmployeeTest()
        {
            //arrange
            IDBSettings   dBSettings    = new DBSettings();
            IMemoryCache  memoryCache   = MemoryCacheHelper.GetMemoryCache();
            CacheSettings cacheSettings = new CacheSettings();
            EmployeeActivityByDapperRepository employeeActivityProvider = new EmployeeActivityByDapperRepository(dBSettings, memoryCache, cacheSettings);

            var tics = DateTime.Now.Ticks;
            EmployeeActivity employeeActivity = new EmployeeActivity()
            {
                FirstName    = string.Concat("dapper_", tics),
                LastName     = string.Concat("LName_", tics),
                EmailAddress = string.Concat(tics, "@email.com"),
                ActivityName = string.Concat("Activity_Name_", tics),
                Comments     = string.Concat("Comments_", tics)
            };

            //act
            var result = employeeActivityProvider.AddEmployee(employeeActivity);

            //assert
            Assert.NotEmpty(dBSettings.ConnectionString);
            Assert.NotNull(employeeActivity);
            Assert.NotEqual <int>(0, result);
        }
Beispiel #2
0
        public void SaveChangesUnitTest()
        {
            //arrange
            IDBSettings dBSettings = new DBSettings();
            IEmployeeActivityDBContext employeeActivityDBContext = new EmployeeActivityDBContext(dBSettings);
            var tics = DateTime.Now.Ticks;
            EmployeeActivity employeeActivity = new EmployeeActivity()
            {
                FirstName    = string.Concat("FName_", tics),
                LastName     = string.Concat("LName_", tics),
                EmailAddress = string.Concat(tics, "@email.com"),
                ActivityName = string.Concat("Activity_Name_", tics),
                Comments     = string.Concat("Comments_", tics)
            };

            //act
            var employeeActivityDbSet = employeeActivityDBContext.EmployeeActivity;

            employeeActivityDbSet.Add(employeeActivity);
            employeeActivityDBContext.SaveChanges();
            var result = employeeActivityDbSet.Where(x => x.FirstName.Equals(employeeActivity.FirstName)).FirstOrDefault();

            //assert
            Assert.NotEmpty(dBSettings.ConnectionString);
            Assert.NotNull(employeeActivity);
            Assert.Equal(result, employeeActivity);
        }
        public async Task <int> AddEmployee(EmployeeActivity employeeActivity)
        {
            try
            {
                if (ReferenceEquals(employeeActivity, null))
                {
                    throw new Exception("employeeActivity is null");
                }

                await _iEmployeeActivityDBContext.EmployeeActivity.AddAsync(employeeActivity);

                _iEmployeeActivityDBContext.SaveChanges();

                if (!ReferenceEquals(employeeActivity, null) && employeeActivity.ActivityId > 0)
                {
                    _memmoryCache.Remove(CacheKeysHelper.Entry);
                    return(employeeActivity.ActivityId);
                }

                return(0);
            }
            catch
            {
                return(0);
            }
        }
Beispiel #4
0
        public async void AddEmployeeActivityByFormTest()
        {
            //arrange
            DBSettings    dBSettings    = new DBSettings();
            IMemoryCache  memoryCache   = MemoryCacheHelper.GetMemoryCache();
            CacheSettings cacheSettings = new CacheSettings();
            EmployeeActivityByDapperRepository    employeeActivityRepository = new EmployeeActivityByDapperRepository(dBSettings, memoryCache, cacheSettings);
            EmployeeActivityApiByDapperController employeeActivityController = new EmployeeActivityApiByDapperController(employeeActivityRepository);

            var tics = DateTime.Now.Ticks;
            EmployeeActivity employeeActivity = new EmployeeActivity()
            {
                FirstName    = string.Concat("FName_", tics),
                LastName     = string.Concat("LName_", tics),
                EmailAddress = string.Concat(tics, "@email.com"),
                ActivityName = string.Concat("Activity_Name_", tics),
                Comments     = string.Concat("Comments_", tics)
            };

            //act
            var result = await employeeActivityController.AddEmployeeActivityByBody(employeeActivity);


            //assert
            Assert.NotEqual <int>(0, result);
        }
        public async Task LogChanges(Employee employee)
        {
            // Managers
            var employeeInfo = await GetEmployeeAsync(employee.Id);

            if (employeeInfo == null)
            {
                return;
            }
            var employeeActivity = new EmployeeActivity();

            if (!string.IsNullOrEmpty(employeeInfo.Manager) &&
                !string.IsNullOrEmpty(employee.Manager) &&
                employeeInfo.Manager != employee.Manager)
            {
                _employeeDb.EmployeeActivities.Add(new EmployeeActivity
                {
                    ChangeType = Constants.MANAGERS,
                    Date       = DateTime.UtcNow,
                    EmployeeId = employeeInfo.Id,
                    NewValue   = employee.Manager,
                    OldValue   = employeeInfo.Manager
                });
            }

            // Title
            if (!string.IsNullOrEmpty(employeeInfo.Position) &&
                !string.IsNullOrEmpty(employee.Position) &&
                employeeInfo.Position != employee.Position)
            {
                _employeeDb.EmployeeActivities.Add(new EmployeeActivity
                {
                    ChangeType = Constants.TITLE,
                    Date       = DateTime.UtcNow,
                    EmployeeId = employeeInfo.Id,
                    NewValue   = employee.Manager,
                    OldValue   = employeeInfo.Manager
                });
            }

            // Permissions
            //if (!ReferenceEquals(employeeInfo.Permissions,null) &&
            //   !!ReferenceEquals(string.IsNullOrEmpty(employee.Permissions)) &&
            //   employeeInfo.Permissions != employee.Permissions)
            //{
            //    _employeeDb.EmployeeActivities.Add(new EmployeeActivity
            //    {
            //        ChangeType = Constants.PERMISSIONS,
            //        Date = DateTime.UtcNow,
            //        EmployeeId = employeeInfo.Id,
            //        NewValue = employee.Manager,
            //        OldValue = employeeInfo.Manager
            //    });
            //}

            await _employeeDb.SaveChangesAsync();
        }
Beispiel #6
0
 public IActionResult AddActivity(int id, EmployeeActivity employeeActivity)
 {
     if (ModelState.IsValid)
     {
         employeeService.AddActivity(id, employeeActivity);
         return(Ok());
     }
     return(BadRequest());
 }
Beispiel #7
0
        public async Task <Result> UpdateAsync(int id, EmployeeRequestModel model)
        {
            var employee = await GetEmployeeByIdAsync(id);

            if (employee == null)
            {
                return("Ein Fehler ist aufgetreten.");
            }

            employee.FirstName        = model.FirstName;
            employee.LastName         = model.LastName;
            employee.JobTitle         = model.JobTitle;
            employee.Description      = model.Description;
            employee.JobTitle         = model.JobTitle;
            employee.ImageUrl         = model.ImageUrl;
            employee.VCard.FirstName  = model.FirstName;
            employee.VCard.LastName   = model.LastName;
            employee.VCard.JobTitle   = model.JobTitle;
            employee.VCard.Image      = model.VCard.Image;
            employee.VCard.Phone      = model.VCard.Phone;
            employee.VCard.Mobile     = model.VCard.Mobile;
            employee.VCard.Street     = model.VCard.Street;
            employee.VCard.PostalCode = model.VCard.PostalCode;
            employee.VCard.City       = model.VCard.City;
            employee.VCard.Country    = model.VCard.Country;
            employee.VCard.Email      = model.VCard.Email;
            employee.VCard.HomePage   = model.VCard.HomePage;

            foreach (var activity in model.Activities)
            {
                var act = await _dbContext
                          .EmployeeActivities
                          .FirstOrDefaultAsync(ea => ea.ActivityId == activity.Id && ea.EmployeeId == employee.Id);

                if (act == null)
                {
                    var innerActivity = await _dbContext
                                        .Activities
                                        .FirstOrDefaultAsync(a => a.Id == activity.Id);

                    var employeeActivity = new EmployeeActivity
                    {
                        Activity   = innerActivity,
                        ActivityId = innerActivity.Id,
                        Employee   = employee,
                        EmployeeId = employee.Id
                    };
                }
            }

            await _dbContext.SaveChangesAsync();

            return(true);
        }
Beispiel #8
0
        public IEnumerable <EmployeeActivity> Get()
        {
            var array = new EmployeeActivity[0];
            var employeeActivities = _employeeActivityProvider.GetEmployeeActivities().ToList();

            if (!ReferenceEquals(employeeActivities, null) && employeeActivities.Count > 0)
            {
                array = new EmployeeActivity[employeeActivities.Count];
                employeeActivities.CopyTo(array, 0);
            }
            return(employeeActivities.ToArray());
        }
Beispiel #9
0
            private EmployeeActivity GetLatestEmployeeActivity()
            {
                EmployeeActivity lastActivity = EmployeeTimeRegistrationWorkflowHelper.GetLatestActivity(this.Context);

                // Gets the details of activity and job names if the activity is break.
                if (lastActivity != null && lastActivity.EmployeeActivityType == EmployeeActivityType.BreakFlowStart)
                {
                    lastActivity.BreakCategory = EmployeeTimeRegistrationWorkflowHelper.GetBreakCategoryByJob(this.Context, lastActivity.JobId);
                }

                return(lastActivity ?? new EmployeeActivity());
            }
Beispiel #10
0
        public void AddActivity(int employeeId, EmployeeActivity employeeActivity)
        {
            employeeActivity.EmployeeId = employeeActivity.Employee.Id;
            employeeActivity.ProjectId  = employeeActivity.Project.Id;
            var employee = context.Employees.Find(employeeId);

            if (employee.EmployeeActivites == null)
            {
                employee.EmployeeActivites = new List <EmployeeActivity>();
            }
            employee.EmployeeActivites.Add(employeeActivity);
            context.SaveChanges();
        }
Beispiel #11
0
            /// <summary>
            /// Gets employee current registration state.
            /// </summary>
            /// <param name="staffId">Enter the staff identifier.</param>
            /// <param name="terminalId">Enter the terminal identifier.</param>
            /// <returns>Returns the latest activity performed by employee.</returns>
            public EmployeeActivity GetEmployeeCurrentRegistrationState(string staffId, string terminalId)
            {
                ThrowIf.NullOrWhiteSpace(staffId, "staffId");
                ThrowIf.NullOrWhiteSpace(terminalId, "terminalId");

                var data = this.InvokeMethod(GetWorkerCurrentTimeRegistrationStateMethodName, staffId, terminalId);

                var employeeActivity = new EmployeeActivity();

                // Parse response data
                DateTime?activityDateTime = Convert.ToDateTime(data[0].ToString());

                employeeActivity.ActivityDateTimeOffset = activityDateTime.ToUtcDateTimeOffset();
                employeeActivity.EmployeeActivityType   = (EmployeeActivityType)data[1];
                employeeActivity.Activity = ((EmployeeActivityType)data[1]).ToString();
                employeeActivity.JobId    = (string)data[2];

                return(employeeActivity);
            }
Beispiel #12
0
        public IActionResult AddEmployeeActivity(EmployeeActivityViewModel employeeActivityViewModel)
        {
            if (ModelState.IsValid)
            {
                var employeeActivity = new EmployeeActivity()
                {
                    FirstName    = employeeActivityViewModel.FirstName,
                    LastName     = employeeActivityViewModel.LastName,
                    EmailAddress = employeeActivityViewModel.EmailAddress,
                    ActivityName = employeeActivityViewModel.ActivityName,
                    Comments     = employeeActivityViewModel.Comments
                };

                _employeeActivityProvider.AddEmployee(employeeActivity);
                return(RedirectToAction("InterestedPersonListings"));
            }
            else
            {
                return(RedirectToAction("Index"));
            }
        }
Beispiel #13
0
        public int AddEmployee(EmployeeActivity employeeActivity)
        {
            try
            {
                if (ReferenceEquals(employeeActivity, null))
                {
                    throw new Exception("employeeActivity is null");
                }

                var connectionString = _dBSettings.ConnectionString;
                var sql = "INSERT INTO EmployeeActivity VALUES(@fName, @lname, @email, @aname, @comments);SELECT CAST(SCOPE_IDENTITY() as int) ";
                var id  = 0;
                using (SqlConnection connection = new SqlConnection(connectionString))
                {
                    var result = connection.Query <int>(sql, new { @fName = employeeActivity.FirstName,
                                                                   @lname = employeeActivity.LastName,
                                                                   @email = employeeActivity.EmailAddress,
                                                                   @aname = employeeActivity.ActivityName, @comments = employeeActivity.Comments });

                    if (result.Any())
                    {
                        id = (int)result.Single();
                    }
                }

                if (id > 0)
                {
                    _memmoryCache.Remove(CacheKeysHelper.Entry);
                }

                return(id);
            }
            catch (Exception ex)
            {
                return(0);
            }
        }
Beispiel #14
0
            /// <summary>
            /// Gets the employee activities for the given store and staff.
            /// </summary>
            /// <param name="staffId">Enter the staff identifier.</param>
            /// <param name="storeId">Enter the store identifier.</param>
            /// <param name="fromUtcDateTime">Enter the from UTC date/time.</param>
            /// <param name="toUtcDateTime">Enter the to UTC date/time.</param>
            /// <param name="pagingInfo">Enter the paging information.</param>
            /// <param name="sortingInfo">Enter the sorting information.</param>
            /// <returns>The paged result of employee activities.</returns>
            public PagedResult <EmployeeActivity> GetEmployeeActivityHistory(string staffId, string storeId, DateTimeOffset?fromUtcDateTime, DateTimeOffset?toUtcDateTime, PagingInfo pagingInfo, SortingInfo sortingInfo)
            {
                ThrowIf.NullOrWhiteSpace(staffId, "staffId");
                ThrowIf.NullOrWhiteSpace(storeId, "storeId");
                ThrowIf.Null(pagingInfo, "pagingInfo");
                ThrowIf.Null(sortingInfo, "sortingInfo");

                ValidateDateTimeOffset(fromUtcDateTime);

                // Set datetime search parameters (same to EPOS, LogbookForm.cs, with 30 minutes tolerance added)
                DateTime convertedFromUtc = fromUtcDateTime.HasValue ?
                                            fromUtcDateTime.Value.UtcDateTime : DateTime.UtcNow.AddDays(1).AddMinutes(-30);
                DateTime convertedToUtc = toUtcDateTime.HasValue ?
                                          toUtcDateTime.Value.UtcDateTime : DateTime.UtcNow.AddMinutes(30);

                // Retrieve the first sort column
                var sortColumn = new SortColumn(EmployeeActivity.DateTimeColumn, true);

                using (IEnumerator <SortColumn> enumerator = sortingInfo.GetEnumerator())
                {
                    if (enumerator.MoveNext())
                    {
                        sortColumn = enumerator.Current;
                    }
                }

                var parameters = new object[]
                {
                    staffId,
                    storeId,
                    convertedFromUtc,
                    convertedToUtc,
                    pagingInfo.Top,
                    pagingInfo.Skip,
                    sortColumn.ColumnName,
                    (byte)(sortColumn.IsDescending ? SortOrderType.Descending : SortOrderType.Ascending)
                };

                var data = this.InvokeMethodAllowNullResponse(GetWorkerHistoryMethodName, parameters);

                var employeeActivities = new List <EmployeeActivity>();

                if (data != null)
                {
                    // Parse response data
                    foreach (var employeeActivityDataRow in data)
                    {
                        var employeeActivityData = (object[])employeeActivityDataRow;

                        var      employeeActivity = new EmployeeActivity();
                        DateTime?activityDateTime = Convert.ToDateTime(employeeActivityData[3]);

                        employeeActivity.Activity = (string)employeeActivityData[2];
                        employeeActivity.ActivityDateTimeOffset = activityDateTime.ToUtcDateTimeOffset();
                        employeeActivity.StoreNumber            = (string)employeeActivityData[4];

                        employeeActivities.Add(employeeActivity);
                    }
                }

                return(new PagedResult <EmployeeActivity>(employeeActivities.AsReadOnly(), pagingInfo));
            }
Beispiel #15
0
            /// <summary>
            /// Gets all employee activities for the given store, activity types and date range.
            /// </summary>
            /// <param name="storeIds">Enter the store numbers.</param>
            /// <param name="activityTypes">Enter the activity types.</param>
            /// <param name="breakActivities">Enter the break activities.</param>
            /// <param name="fromUtcDateTime">Enter the from date/time.</param>
            /// <param name="toUtcDateTime">Enter the to date/time.</param>
            /// <param name="pagingInfo">Enter the paging information.</param>
            /// <param name="sortingInfo">Enter the sorting information.</param>
            /// <returns>The paged result of employee activities.</returns>
            public PagedResult <EmployeeActivity> GetManagerActivityHistory(string[] storeIds, EmployeeActivityType[] activityTypes, string[] breakActivities, DateTimeOffset?fromUtcDateTime, DateTimeOffset?toUtcDateTime, PagingInfo pagingInfo, SortingInfo sortingInfo)
            {
                ThrowIf.Null(pagingInfo, "pagingInfo");
                ThrowIf.Null(sortingInfo, "sortingInfo");

                ValidateDateTimeOffset(fromUtcDateTime);

                // Set datetime search parameters (same to EPOS, ViewTimeClockEntriesViewModel.cs)
                DateTime convertedFromUtc = fromUtcDateTime.HasValue ?
                                            fromUtcDateTime.Value.UtcDateTime : DateTime.Today.AddDays(-90).ToUniversalTime(); // Previous 90 days
                DateTime convertedToUtc = toUtcDateTime.HasValue ?
                                          toUtcDateTime.Value.UtcDateTime : DateTime.Today.AddDays(1).ToUniversalTime();       // To the end of of the current day

                // Creates the CSV search parameters
                int[]  activityTypeList            = Array.ConvertAll(activityTypes, value => (int)value);
                string storeIdsCsvStr              = (storeIds == null) ? string.Empty : string.Join(",", storeIds);
                string employeeActivityTypesCsvStr = (activityTypeList == null) ? string.Empty : string.Join(",", activityTypeList);
                string breakActivityJobIdsCsvStr   = (breakActivities == null) ? string.Empty : string.Join(",", breakActivities);

                // Retrieve the first sort column
                var sortColumn = new SortColumn(EmployeeActivity.DateTimeColumn, true);

                using (IEnumerator <SortColumn> enumerator = sortingInfo.GetEnumerator())
                {
                    if (enumerator.MoveNext())
                    {
                        sortColumn = enumerator.Current;
                    }
                }

                var parameters = new object[]
                {
                    string.Empty,               // Personnel number of the worker.
                    storeIdsCsvStr,
                    employeeActivityTypesCsvStr,
                    convertedFromUtc,
                    convertedToUtc,
                    breakActivityJobIdsCsvStr,
                    pagingInfo.NumberOfRecordsToFetch,
                    pagingInfo.Skip,
                    sortColumn.ColumnName,
                    (byte)(sortColumn.IsDescending ? SortOrderType.Descending : SortOrderType.Ascending)
                };

                var data = this.InvokeMethodAllowNullResponse(
                    GetManagerHistoryMethodName,
                    parameters);

                var employeeActivities = new List <EmployeeActivity>();

                if (data != null)
                {
                    // Parse response data
                    foreach (var employeeActivityDataRow in data)
                    {
                        var employeeActivityData = (object[])employeeActivityDataRow;

                        var      employeeActivity = new EmployeeActivity();
                        DateTime?activityDateTime = Convert.ToDateTime(employeeActivityData[3]);

                        employeeActivity.StaffName = (string)employeeActivityData[0];
                        employeeActivity.StaffId   = (string)employeeActivityData[1];
                        employeeActivity.ActivityDateTimeOffset = activityDateTime.ToUtcDateTimeOffset();
                        employeeActivity.Activity    = ((EmployeeActivityType)employeeActivityData[5]).ToString();
                        employeeActivity.StoreNumber = (string)employeeActivityData[6];

                        employeeActivities.Add(employeeActivity);
                    }
                }

                return(new PagedResult <EmployeeActivity>(employeeActivities.AsReadOnly(), pagingInfo));
            }
Beispiel #16
0
 public async Task <int> AddEmployeeActivityByBody([FromBody] EmployeeActivity employeeActivity)
 {
     return(await _employeeActivityProvider.AddEmployee(employeeActivity));
 }
Beispiel #17
0
            /// <summary>
            /// Workflow to process employee time clock activities.
            /// </summary>
            /// <param name="request">The request.</param>
            /// <returns>The response.</returns>
            protected override EmployeeTimeRegistrationResponse Process(EmployeeTimeRegistrationRequest request)
            {
                ThrowIf.Null(request, "request");
                EmployeeTimeRegistrationResponse response;

                if (request.IsLatestActivity && request.IsSelectStore)
                {
                    throw new DataValidationException(DataValidationErrors.Microsoft_Dynamics_Commerce_Runtime_InvalidRequest, "Both latest activity and selecting from stores is not supported");
                }

                bool enableTimeRegistration = EmployeeTimeRegistrationWorkflowHelper.ValidateTimeRegistrationFunctionalityProfile(this.Context);

                if (!enableTimeRegistration)
                {
                    throw new DataValidationException(
                              DataValidationErrors.Microsoft_Dynamics_Commerce_Runtime_TimeClockNotEnabled,
                              string.Format("Time Clock should be enabled before performing employee activities. EmployeeActivityType: {0}", request.EmployeeActivityType));
                }

                // This flag is set to true if client needs to retrieve the latest activity of the employee.
                if (request.IsLatestActivity)
                {
                    EmployeeActivity employeeActivity = this.GetLatestEmployeeActivity();

                    response = new EmployeeTimeRegistrationResponse(new[] { employeeActivity }.AsPagedResult());

                    return(response);
                }

                // The workflow follows any one of the activity chosen from client.
                switch (request.EmployeeActivityType)
                {
                case EmployeeActivityType.ClockIn:
                {
                    var currentActivityDateTimeOffset = this.ProcessClockIn();
                    response = new EmployeeTimeRegistrationResponse(currentActivityDateTimeOffset);
                    break;
                }

                case EmployeeActivityType.ClockOut:
                {
                    var currentActivityDateTimeOffset = this.ProcessClockOut();
                    response = new EmployeeTimeRegistrationResponse(currentActivityDateTimeOffset);
                    break;
                }

                case EmployeeActivityType.BreakFromWork:
                {
                    var currentActivityDateTimeOffset = this.ProcessBreakFlow(EmployeeTimeRegistrationWorkflowHelper.BreakFromWork);
                    response = new EmployeeTimeRegistrationResponse(currentActivityDateTimeOffset);
                    break;
                }

                case EmployeeActivityType.BreakForLunch:
                {
                    var currentActivityDateTimeOffset = this.ProcessBreakFlow(EmployeeTimeRegistrationWorkflowHelper.BreakForLunch);
                    response = new EmployeeTimeRegistrationResponse(currentActivityDateTimeOffset);
                    break;
                }

                case EmployeeActivityType.Logbook:
                {
                    if (request.IsManagerLogbook)
                    {
                        EmployeePermissions employeePermisssion = EmployeePermissionHelper.GetEmployeePermissions(this.Context, this.Context.GetPrincipal().UserId);

                        if (employeePermisssion == null || !employeePermisssion.AllowViewTimeClockEntries)
                        {
                            throw new DataValidationException(
                                      DataValidationErrors.Microsoft_Dynamics_Commerce_Runtime_ViewTimeClockNotEnabled,
                                      string.Format("View Time Clock Entries should be enabled to view other employee activities. EmployeeActivityType: {0}", request.EmployeeActivityType));
                        }

                        var employeeActivities = this.ProcessManagerLogBook(request.EmployeeActivitySearchCriteria, request.QueryResultSettings.Paging, request.QueryResultSettings.Sorting);
                        response = new EmployeeTimeRegistrationResponse(employeeActivities.AsPagedResult());
                    }
                    else
                    {
                        var employeeActivities = this.ProcessEmployeeLogBook(request.EmployeeActivitySearchCriteria, request.QueryResultSettings.Paging, request.QueryResultSettings.Sorting);
                        response = new EmployeeTimeRegistrationResponse(employeeActivities.AsPagedResult());
                    }

                    break;
                }

                default:
                    throw new DataValidationException(
                              DataValidationErrors.Microsoft_Dynamics_Commerce_Runtime_UnSupportedType,
                              string.Format("Unsupported type for Employee Activity {0}", request.EmployeeActivityType));
                }

                return(response);
            }
Beispiel #18
0
        public async Task <int> CreateAsync(EmployeeRequestModel model)
        {
            var vCard = new VCard()
            {
                FirstName    = model.FirstName,
                LastName     = model.LastName,
                JobTitle     = model.JobTitle,
                Organization = model.VCard.Organization,
                Phone        = model.VCard.Phone,
                Street       = model.VCard.Street,
                PostalCode   = model.VCard.PostalCode,
                City         = model.VCard.City,
                Country      = model.VCard.Country,
                Email        = model.VCard.Email,
                HomePage     = model.VCard.HomePage,
                Mobile       = model.VCard.Mobile
            };

            var employee = new Data.Models.Employee
            {
                Description = model.Description,
                FirstName   = model.FirstName,
                LastName    = model.LastName,
                ImageUrl    = model.ImageUrl,
                JobTitle    = model.JobTitle,
                VCard       = vCard
            };

            await _dbContext.AddAsync(employee);

            await _dbContext.SaveChangesAsync();

            foreach (var activity in model.Activities)
            {
                var act = await _dbContext
                          .Activities
                          .FirstOrDefaultAsync(a => a.Id == activity.Id);

                var emp = await _dbContext
                          .Employees
                          .FirstOrDefaultAsync(e => e.Id == employee.Id);

                if (act == null || emp == null)
                {
                    continue;
                }
                var empAct = new EmployeeActivity
                {
                    Activity   = act,
                    ActivityId = act.Id,
                    Employee   = emp,
                    EmployeeId = emp.Id
                };

                await _dbContext.AddAsync(empAct);
            }

            await _dbContext.SaveChangesAsync();

            return(employee.Id);
        }
 public int AddEmployeeActivityByForm([FromForm] EmployeeActivity employeeActivity)
 {
     return(_employeeActivityProvider.AddEmployee(employeeActivity));
 }