Ejemplo n.º 1
0
        void UpdatePrices()
        {
            var source = dgProjectJournalLinePageGrid.GetVisibleRows() as IEnumerable <ProjectJournalLineLocal>;

            foreach (var rec in source)
            {
                dgProjectJournalLinePageGrid.SetLoadedRow(rec);
                var pro = (Uniconta.DataModel.Project)ProjectCache.Get(rec._Project);
                if (pro != null)
                {
                    if (pro._Dim1 != null)
                    {
                        rec.Dimension1 = pro._Dim1;
                    }
                    if (pro._Dim2 != null)
                    {
                        rec.Dimension2 = pro._Dim2;
                    }
                    if (pro._Dim3 != null)
                    {
                        rec.Dimension3 = pro._Dim3;
                    }
                    if (pro._Dim4 != null)
                    {
                        rec.Dimension4 = pro._Dim4;
                    }
                    if (pro._Dim5 != null)
                    {
                        rec.Dimension5 = pro._Dim5;
                    }
                }

                rec.InsidePropChange = true;
                if (rec._Item != null)
                {
                    var cat = rec._PrCategory;
                    SetItem(rec);
                    SetCat(rec, cat);
                }

                getCostAndSales(rec);
                if (rec._Employee != null)
                {
                    TimePriceLookup?.GetEmployeePrice(rec);
                    var emp = (Uniconta.DataModel.Employee)EmployeeCache?.Get(rec._Employee);
                    if (emp?._PayrollCategory != null)
                    {
                        rec.InsidePropChange = false;
                        rec.PayrollCategory  = emp._PayrollCategory;
                    }
                }
                else if (rec._PayrollCategory != null)
                {
                    PayrollCat(rec, true);
                }

                dgProjectJournalLinePageGrid.SetModifiedRow(rec);
                rec.InsidePropChange = false;
            }
        }
        private void ButtonDashboard_Click(object sender, RoutedEventArgs e)
        {
            TextblockPanelName.Text = "Dashboard";

            RoleCache.GetInstance().Clear();
            EmployeeCache.GetInstance().Clear();
            ResourceCache.GetInstance().Clear();
            CustomerCache.GetInstance().Clear();
            ProcessCache.GetInstance().Clear();
            ProjectCache.GetInstance().Clear();

            List <Resource> recs = ResourceCache.GetInstance().Resources;

            recs = ResourceCache.GetInstance().UpdateAllQSizes();
            recs = recs.OrderByDescending(r => r.QSize).ToList <Resource>();
            var emps = EmployeeCache.GetInstance().Employees;

            emps        = EmployeeCache.GetInstance().UpdateAllQSizes();
            emps        = emps.OrderByDescending(e => e.QSize).ToList <Employee>();
            DataContext = new DashboardViewModel
            {
                Resources        = new ObservableCollection <Resource>(recs),
                SelectedResource = recs[0],
                Employees        = new ObservableCollection <Employee>(emps),
                SelectedEmployee = emps[0]
            };
        }
        private void ProjectViewNewProjectClickHandler(ProjectsViewModel viewModel)
        {
            TextblockPanelName.Text = "Create New Project";

            RoleCache.GetInstance().Clear();
            EmployeeCache.GetInstance().Clear();
            ResourceCache.GetInstance().Clear();
            CustomerCache.GetInstance().Clear();
            ProcessCache.GetInstance().Clear();
            ProjectCache.GetInstance().Clear();
            var resources = ResourceCache.GetInstance().Resources;

            resources = ResourceCache.GetInstance().UpdateAllQSizes();

            DataContext = new AddEditProjectViewModel
            {
                Project = new Project
                {
                    Id          = 0,
                    Processes   = new List <Process>(),
                    StartDate   = DateTimeOffset.UtcNow,
                    PoDate      = DateTimeOffset.UtcNow,
                    Quantity    = 1,
                    OrderStatus = Project.ProjectOrderStatus.WaitingQuote,
                },
                BackClickedHandler = AddEditProjectViewBackClickHandler,
                Customers          = CustomerCache.GetInstance().Customers,
                Processes          = new ObservableCollection <Process>(new List <Process>()),
                Resources          = resources.OrderByDescending(r => r.QSize).ToList <Resource>(),
                Employees          = EmployeeCache.GetInstance().Employees
            };
        }
Ejemplo n.º 4
0
 public void Refresh()
 {
     CustomerCache.GetInstance().Clear();
     EmployeeCache.GetInstance().Clear();
     Customers = new ObservableCollection <Customer>(CustomerCache.GetInstance().Customers);
     Employees = new ObservableCollection <Employee>(EmployeeCache.GetInstance().Employees);
     ListViewCustomers.ItemsSource       = Customers;
     ComboboxCustomerManager.ItemsSource = Employees;
     ListViewCustomers.SelectedItem      = GetFirstCustomer();
 }
        public static IEnumerable <EmployeeCountByIntervalLine> GetEmployeeCountByInterval(DateTime initialDate, DateTime finalDate, TimeIntervalType timeInterval)
        {
            EmployeeCache.UpdateData(initialDate, finalDate);
            var employees = EmployeeCache.CachedData;

            // Query:
            var employeesQuery = from employee in employees
                                 where employee.HiredOn <= finalDate &&
                                 (employee.FiredOn >= initialDate || employee.FiredOn == DateTime.MinValue)
                                 select employee;

            var dateTimes = new List <DateTime>();

            if (timeInterval == TimeIntervalType.Year)
            {
                var temp = new DateTime(initialDate.Year, 1, 1);
                for (int i = 0; i < finalDate.Year - initialDate.Year + 1; i++)
                {
                    dateTimes.Add(temp.AddYears(i));
                }
            }
            else
            {
                var temp   = new DateTime(initialDate.Year, initialDate.Month, 1);
                int months = ((finalDate.Year - initialDate.Year) * 12) + finalDate.Month - initialDate.Month + 1;
                for (int i = 0; i < months; i++)
                {
                    dateTimes.Add(temp.AddMonths(i));
                }
            }

            // Empty:
            var empty = from date in dateTimes
                        select new EmployeeCountByIntervalLine(date, 0);

            var output = new LinkedList <EmployeeCountByIntervalLine>();

            foreach (var e in empty)
            {
                DateTime beginDate = e.Date;
                DateTime endDate   = timeInterval == TimeIntervalType.Month ? beginDate.AddMonths(1).AddDays(-1) : new DateTime(beginDate.Year, 12, 31);

                foreach (var employee in employeesQuery)
                {
                    if (employee.HiredOn <= endDate && (employee.FiredOn >= beginDate || employee.FiredOn == DateTime.MinValue))
                    {
                        e.Count++;
                    }
                }

                output.AddLast(e);
            }

            return(output.OrderBy(x => x.Date));
        }
Ejemplo n.º 6
0
 public void Refresh()
 {
     EmployeeCache.GetInstance().Clear();
     RoleCache.GetInstance().Clear();
     Roles     = new ObservableCollection <EmployeeRole>(RoleCache.GetInstance().Roles);
     Employees = new ObservableCollection <Employee>(EmployeeCache.GetInstance().Employees);
     ComboboxEmpRole.ItemsSource    = Roles;
     ListViewEmployees.ItemsSource  = Employees;
     ListViewEmployees.SelectedItem = GetFirstEmployee();
     ComboboxEmpRole.SelectedItem   = ((Employee)ListViewEmployees.SelectedItem).Role;
 }
 private void EmployeeSaveClickeHandler()
 {
     foreach (var process in ProcessCache.GetInstance().GetByEmployeeId(SelectedEmployee?.Id ?? 0))
     {
         ProcessCache.GetInstance().Update(process);
     }
     CommonFunctions.UpdateQs();
     ResourceCache.GetInstance().UpdateAllQSizes();
     EmployeeCache.GetInstance().UpdateAllQSizes();
     Refresh();
 }
Ejemplo n.º 8
0
 private void SaveEmployee(Employee empToSave)
 {
     if (empToSave.Id > 0)
     {
         EmployeeCache.GetInstance().Update(empToSave);
     }
     else
     {
         EmployeeCache.GetInstance().Insert(empToSave);
     }
     Employees = new ObservableCollection <Employee>(EmployeeCache.GetInstance().Employees);
 }
Ejemplo n.º 9
0
        public UserInfoModel(string employeeId)
        {
            EmployeeId = employeeId;
            var person = EmployeeCache.GetEmployee(employeeId, true);

            if (person != null)
            {
                Name     = person.PreferredName;
                Phone    = person.PhoneNumber;
                Location = person.WorkLocation;
                Org      = person.HomeOrginization;
                OrcidId  = person.OrcidId;
            }
        }
Ejemplo n.º 10
0
        /// <summary>
        /// Closes the stream and ends the api session
        /// </summary>
        public void Close()
        {
            // cancel the renew login process
            _timer?.Dispose();

            // close the cache services
            EmployeeCache?.WriteCacheEntries();
            JobTitleCache?.WriteCacheEntries();
            DepartmentCache?.WriteCacheEntries();
            WorkflowCache?.WriteCacheEntries();
            EmployeeGroupCache?.WriteCacheEntries();
            EmployeeProfileCache?.WriteCacheEntries();

            Logger.Debug("Closed the Api Stream");
        }
        private void Refresh()
        {
            int selectedResourceIndex = Resources.IndexOf(SelectedResource);
            int selectedEmployeeIndex = Employees.IndexOf(SelectedEmployee);

            SelectedResource = null;
            SelectedEmployee = null;
            Thread.Sleep(20);
            _                = ResourceCache.GetInstance().Resources;
            Resources        = new ObservableCollection <Resource>(ResourceCache.GetInstance().UpdateAllQSizes().OrderByDescending(r => r.QSize));
            SelectedResource = Resources[selectedResourceIndex];
            _                = EmployeeCache.GetInstance().Employees;
            Employees        = new ObservableCollection <Employee>(EmployeeCache.GetInstance().UpdateAllQSizes().OrderByDescending(e => e.QSize));
            SelectedEmployee = Employees[selectedEmployeeIndex];
        }
Ejemplo n.º 12
0
        internal void Refresh()
        {
            var projectId = Project?.Id;

            EmployeeCache.GetInstance().Clear();
            ResourceCache.GetInstance().Clear();
            ProcessCache.GetInstance().Clear();
            ProjectCache.GetInstance().Clear();
            Resources = ResourceCache.GetInstance().Resources;
            Resources = ResourceCache.GetInstance().UpdateAllQSizes();
            Employees = EmployeeCache.GetInstance().Employees;
            if (projectId.Value > 0)
            {
                Project   = ProjectCache.GetInstance().GetById(projectId.Value);
                Processes = new ObservableCollection <Process>(Project.Processes);
            }
        }
        private void ProjectViewOpenProectClickHandler(ProjectsViewModel viewModel)
        {
            TextblockPanelName.Text = "Project Details";
            RoleCache.GetInstance().Clear();
            EmployeeCache.GetInstance().Clear();
            ResourceCache.GetInstance().Clear();
            CustomerCache.GetInstance().Clear();
            ProcessCache.GetInstance().Clear();
            ProjectCache.GetInstance().Clear();
            var resources = ResourceCache.GetInstance().Resources;

            resources = ResourceCache.GetInstance().UpdateAllQSizes();

            DataContext = new AddEditProjectViewModel
            {
                Project            = viewModel.SelectedProject,
                BackClickedHandler = AddEditProjectViewBackClickHandler,
                Customers          = CustomerCache.GetInstance().Customers,
                Processes          = new ObservableCollection <Process>(viewModel.SelectedProject.Processes),
                Resources          = resources.OrderByDescending(r => r.QSize).ToList <Resource>(),
                Employees          = EmployeeCache.GetInstance().Employees
            };
        }
Ejemplo n.º 14
0
        async void PayrollCat(ProjectBudgetLineLocal rec, bool AddItem)
        {
            double costPrice = 0, salesPrice = 0;
            var    emp = (Uniconta.DataModel.Employee)EmployeeCache?.Get(rec._Employee);

            if (emp != null)
            {
                costPrice  = emp._CostPrice;
                salesPrice = emp._SalesPrice;
            }

            var pay = (Uniconta.DataModel.EmpPayrollCategory)PayrollCache?.Get(rec._PayrollCategory);

            if (pay != null)
            {
                if (pay._Unit != 0 && rec._Unit != pay._Unit)
                {
                    rec._Unit = pay._Unit;
                    rec.NotifyPropertyChanged("Unit");
                }

                if (pay._PrCategory != null)
                {
                    rec.PrCategory = pay._PrCategory;
                }

                if (pay._Rate != 0)
                {
                    costPrice = pay._Rate;
                }
                if (pay._SalesPrice != 0)
                {
                    salesPrice = pay._SalesPrice;
                }

                string Item = pay._Item;
                if (pay._Dim1 != null)
                {
                    rec.Dimension1 = pay._Dim1;
                }
                if (pay._Dim2 != null)
                {
                    rec.Dimension2 = pay._Dim2;
                }
                if (pay._Dim3 != null)
                {
                    rec.Dimension3 = pay._Dim3;
                }
                if (pay._Dim4 != null)
                {
                    rec.Dimension4 = pay._Dim4;
                }
                if (pay._Dim5 != null)
                {
                    rec.Dimension5 = pay._Dim5;
                }

                if (emp != null)
                {
                    Uniconta.DataModel.EmpPayrollCategoryEmployee found = null;
                    var Rates = pay.Rates ?? await pay.LoadRates(api);

                    foreach (var rate in Rates)
                    {
                        if (rate._ValidFrom != DateTime.MinValue && rate._ValidFrom > rec._Date)
                        {
                            continue;
                        }
                        if (rate._ValidTo != DateTime.MinValue && rate._ValidTo < rec._Date)
                        {
                            continue;
                        }
                        if (rate._Employee != emp._Number)
                        {
                            continue;
                        }
                        if (rate._Project != null)
                        {
                            if (rate._Project == rec._Project)
                            {
                                found = rate;
                                break;
                            }
                        }
                        else if (found == null)
                        {
                            found = rate;
                        }
                    }

                    if (found != null)
                    {
                        if (found._CostPrice != 0d)
                        {
                            costPrice = found._CostPrice;
                        }
                        else if (found._Rate != 0d)
                        {
                            costPrice = found._Rate;
                        }
                        if (found._SalesPrice != 0d)
                        {
                            salesPrice = found._SalesPrice;
                        }
                        if (found._Item != null)
                        {
                            Item = found._Item;
                        }

                        if (found._Dim1 != null)
                        {
                            rec.Dimension1 = found._Dim1;
                        }
                        if (found._Dim2 != null)
                        {
                            rec.Dimension2 = found._Dim2;
                        }
                        if (found._Dim3 != null)
                        {
                            rec.Dimension3 = found._Dim3;
                        }
                        if (found._Dim4 != null)
                        {
                            rec.Dimension4 = found._Dim4;
                        }
                        if (found._Dim5 != null)
                        {
                            rec.Dimension5 = found._Dim5;
                        }
                    }
                }

                if (AddItem && Item != null)
                {
                    rec.Item = Item;
                }
            }
            if (costPrice != 0d)
            {
                if (rec._Qty == 0)
                {
                    rec.Qty = 1d;
                }
                rec.CostPrice = costPrice;
            }
            if (salesPrice != 0d)
            {
                if (rec._Qty == 0)
                {
                    rec.Qty = 1d;
                }
                rec.SalesPrice = salesPrice;
            }
        }
Ejemplo n.º 15
0
        private void SelectedItem_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
        {
            var rec = (ProjectBudgetLineLocal)sender;

            switch (e.PropertyName)
            {
            case "Item":
                if (!rec.InsidePropChange)
                {
                    rec.InsidePropChange = true;
                    SetItem(rec);
                    rec.InsidePropChange = false;
                }
                break;

            case "Employee":
                if (rec._Employee != null)
                {
                    var emp = (Uniconta.DataModel.Employee)EmployeeCache?.Get(rec._Employee);
                    if (emp?._PayrollCategory != null)
                    {
                        rec.PayrollCategory = emp._PayrollCategory;
                    }
                    else if (!rec.InsidePropChange)
                    {
                        rec.InsidePropChange = true;
                        PayrollCat(rec, true);
                        rec.InsidePropChange = false;
                    }
                }
                break;

            case "PayrollCategory":
                if (rec._Employee != null && rec._PayrollCategory != null)
                {
                    if (!rec.InsidePropChange)
                    {
                        rec.InsidePropChange = true;
                        PayrollCat(rec, true);
                        rec.InsidePropChange = false;
                    }
                }
                break;

            case "TimeFrom":
            case "TimeTo":
                if (rec._ToTime >= rec._FromTime)
                {
                    rec.Qty = (rec._ToTime - rec._FromTime) / 60d;
                }
                break;

            case "Qty":
                if (rec._Qty != (rec._ToTime - rec._FromTime) / 60d)
                {
                    rec._FromTime = 0;
                    rec._ToTime   = 0;
                }
                break;

            case "CostPrice":
            case "SalesPrice":
                if (rec._Qty == 0d)
                {
                    rec.Qty = 1d;
                }
                break;
            }
        }
Ejemplo n.º 16
0
 public JsonResult GetUserName(string id)
 {
     return(Json(EmployeeCache.GetName(id)));
 }
Ejemplo n.º 17
0
        private void SelectedItem_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
        {
            var rec = (ProjectJournalLineLocal)sender;

            switch (e.PropertyName)
            {
            case "Item":
                if (!rec.InsidePropChange)
                {
                    rec.InsidePropChange = true;
                    SetItem(rec);
                    getCostAndSales(rec);
                    rec.InsidePropChange = false;
                }
                break;

            case "Project":
                var pro = (Uniconta.DataModel.Project)ProjectCache.Get(rec._Project);
                if (pro != null)
                {
                    if (pro._Dim1 != null)
                    {
                        rec.Dimension1 = pro._Dim1;
                    }
                    if (pro._Dim2 != null)
                    {
                        rec.Dimension2 = pro._Dim2;
                    }
                    if (pro._Dim3 != null)
                    {
                        rec.Dimension3 = pro._Dim3;
                    }
                    if (pro._Dim4 != null)
                    {
                        rec.Dimension4 = pro._Dim4;
                    }
                    if (pro._Dim5 != null)
                    {
                        rec.Dimension5 = pro._Dim5;
                    }
                    rec.Invoiceable = pro._InvoiceAble;
                    getCostAndSales(rec);
                    TimePriceLookup?.GetEmployeePrice(rec);
                    setTask(pro, rec);
                }
                break;

            case "PrCategory":
                getCostAndSales(rec);
                SetInvoiceable(rec);
                break;

            case "Employee":
                if (rec._Employee != null)
                {
                    var emp = (Uniconta.DataModel.Employee)EmployeeCache?.Get(rec._Employee);
                    if (emp?._PayrollCategory != null)
                    {
                        rec.PayrollCategory = emp._PayrollCategory;
                    }
                    if (!rec.InsidePropChange)
                    {
                        rec.InsidePropChange = true;
                        TimePriceLookup?.GetEmployeePrice(rec);
                        PayrollCat(rec, true);     //rec.InsidePropChange = false; done inside method
                    }
                }
                break;

            case "PayrollCategory":
                if (rec._Employee != null && rec._PayrollCategory != null)
                {
                    if (!rec.InsidePropChange)
                    {
                        rec.InsidePropChange = true;
                        TimePriceLookup?.GetEmployeePrice(rec);
                        PayrollCat(rec, true);     //rec.InsidePropChange = false; done inside method
                    }
                }
                break;

            case "Warehouse":
                if (WarehouseCache != null)
                {
                    var selected = (InvWarehouse)WarehouseCache.Get(rec._Warehouse);
                    setLocation(selected, rec);
                }
                break;

            case "Location":
                if (string.IsNullOrEmpty(rec._Warehouse))
                {
                    rec._Location = null;
                }
                break;

            case "TimeFrom":
            case "TimeTo":
                if (rec._TimeTo >= rec._TimeFrom)
                {
                    rec.Qty = (rec._TimeTo - rec._TimeFrom) / 60d;
                }
                else
                {
                    rec.Qty = ((rec._TimeTo + 24 * 60) - rec._TimeFrom) / 60d;
                }
                break;

            case "Qty":
                UpdatePrice(rec);
                double tim;
                if (rec._TimeTo >= rec._TimeFrom)
                {
                    tim = (rec._TimeTo - rec._TimeFrom) / 60d;
                }
                else
                {
                    tim = ((rec._TimeTo + 24 * 60) - rec._TimeFrom) / 60d;
                }

                if (rec._Qty != tim)
                {
                    rec._TimeFrom = 0;
                    rec._TimeTo   = 0;
                }
                break;

            case "EAN":
                FindOnEAN(rec);
                break;

            case "SerieBatch":
                if (ItemsCache != null)
                {
                    if (rec._Item == null || rec._Item == string.Empty)
                    {
                        GetItemFromSerailNumber(rec);
                    }
                }
                break;

            case "Task":
                if (!rec.InsidePropChange)
                {
                    rec.InsidePropChange = true;
                    if (rec._Task != null && rec._Project != null)
                    {
                        var proj = (Uniconta.DataModel.Project)ProjectCache.Get(rec._Project);
                        var task = proj.FindTask(rec._Task);
                        if (task != null)
                        {
                            rec.WorkSpace       = task._WorkSpace;
                            rec.PayrollCategory = task._PayrollCategory != null ? task._PayrollCategory : rec.PayrollCategory;
                        }
                    }
                    rec.InsidePropChange = false;
                }
                break;

            case "WorkSpace":
                if (!rec.InsidePropChange)
                {
                    rec.InsidePropChange = true;
                    if (rec._Task != null && rec._Project != null)
                    {
                        var proj = (Uniconta.DataModel.Project)ProjectCache.Get(rec._Project);
                        var task = proj.FindTask(rec._Task);
                        if (task != null && task._WorkSpace != rec._WorkSpace)
                        {
                            rec.Task = null;
                        }
                    }
                    rec.InsidePropChange = false;
                }
                break;
            }
        }
Ejemplo n.º 18
0
 private void DeleteSelectedEmployee()
 {
     EmployeeCache.GetInstance().Delete(ListViewEmployees.SelectedItem as Employee);
     Employees = new ObservableCollection <Employee>(EmployeeCache.GetInstance().Employees);
 }
Ejemplo n.º 19
0
        /// <summary>
        /// Writes the user to the stream
        /// </summary>
        /// <param name="user">Reference to the user to write to the stream.</param>
        public void Write(ActiveDirectoryUser user)
        {
            var employee = new MetaObject();

            // process each of the field values in the map
            string   employeeNum               = null;
            EntityId workflowTemplate          = null;
            EntityId division                  = null;
            SortedList <string, string> groups = null;

            foreach (MapElement map in StreamConfig.Mapping)
            {
                object value = null;
                switch (map.To)
                {
                case SystemFields.JobTitleId:
                    value = GetJobTitleValue(map.From, division, user);
                    break;

                case SystemFields.EmployeeNum:
                    employeeNum = GetFieldValue(map.From, user);
                    value       = employeeNum;
                    break;

                case SystemFields.Department:
                    value = GetDepartment(map.From, user, division);
                    break;

                case SystemFields.PrimaryDivision:
                    division = GetDivisionFieldValue(map.From, user);
                    value    = division;
                    break;

                case SystemFields.Groups:
                    groups = GetFieldValueAsObject(map.From, user) as SortedList <string, string>;
                    break;

                case SystemFields.WorkflowTemplate:
                    break;

                default:
                    value = GetFieldValue(map.From, user);
                    break;
                }

                // only map the property if a value is present
                if (value != null)
                {
                    employee[map.To] = value;
                }
            }

            if (employeeNum == null)
            {
                var userJson = JsonConvert.SerializeObject(user);
                Logger.Error("Error writing Employee to stream. Missing EmployeeNum map \"to\" value. {0}", userJson);
                return;
            }

            if (division == null)
            {
                var userJson = JsonConvert.SerializeObject(user);
                Logger.Error("Error writing Employee to stream. Missing PrimaryDivision map \"to\" value. {0}", userJson);
                return;
            }

            if (workflowTemplate == null)
            {
                workflowTemplate = GetDefaultWorkflowTemplate();
                employee[SystemFields.WorkflowTemplate] = workflowTemplate;
            }

            // get the id of the employee from the cache...if found this is an update
            // otherwise we are creating a new employee.
            EntityId employeeId = null;

            if (EmployeeCache.ContainsKey(employeeNum))
            {
                employeeId = new EntityId(EmployeeCache.GetValue(employeeNum));
            }
            else
            {
                // check to see if the username already exists in c360
                var empId = ApiService.GetEmployeeIdAsync(employeeNum, AuthToken).GetAwaiter().GetResult();
                if (empId != null)
                {
                    employeeId = new EntityId(empId);
                    EmployeeCache.Add(employeeNum, employeeId.Token);
                }
            }

            if (employeeId == null)
            {
                // create the new employee record
                employee[SystemFields.CanLogin] = true;
                employee[SystemFields.Password] = Guid.NewGuid().ToString();

                employeeId = new EntityId(ApiService.CreateEmployeeAsync(employee, AuthToken).GetAwaiter().GetResult());
                EmployeeCache.Add(employeeNum, employeeId.Token);
            }
            else
            {
                // update an existing employee record
                ApiService.UpdateEmployeeAsync(employeeId, employee, AuthToken).GetAwaiter().GetResult();
            }

            if (groups != null)
            {
                ProcessGroupChanges(employeeId, groups.Values.ToList());
            }
        }