Example #1
0
        public static DeviceExportTaskContext ScheduleNow(DeviceExportOptions Options)
        {
            // Build Context
            var context = new DeviceExportTaskContext(Options);

            // Build Data Map
            var task = new DeviceExportTask();
            JobDataMap taskData = new JobDataMap() { { JobDataMapContext, context} };
            
            // Schedule Task
            context.TaskStatus = task.ScheduleTask(taskData);

            return context;
        }
 public DeviceExportTaskContext(DeviceExportOptions Options)
 {
     this.Options = Options;
 }
Example #3
0
 public static DeviceExportResult GenerateExport(DiscoDataContext Database, DeviceExportOptions Options)
 {
     return GenerateExport(Database, Options, ScheduledTaskMockStatus.Create("Device Export"));
 }
Example #4
0
        public static DeviceExportResult GenerateExport(DiscoDataContext Database, IQueryable<Device> Devices, DeviceExportOptions Options, IScheduledTaskStatus TaskStatus)
        {
            TaskStatus.UpdateStatus(15, "Building metadata and database query");
            var metadata = Options.BuildMetadata();

            if (metadata.Count == 0)
                throw new ArgumentException("At least one export field must be specified", "Options");

            // Update Users
            if (Options.AssignedUserDisplayName ||
                Options.AssignedUserSurname ||
                Options.AssignedUserGivenName ||
                Options.AssignedUserPhoneNumber ||
                Options.AssignedUserEmailAddress)
            {
                TaskStatus.UpdateStatus(20, "Updating Assigned User details");
                var users = Devices.Where(d => d.AssignedUserId != null).Select(d => d.AssignedUserId).Distinct().ToList();

                users.Select((userId, index) =>
                {
                    TaskStatus.UpdateStatus(20 + (((double)20 / users.Count) * index), string.Format("Updating Assigned User details: {0}", userId));
                    try
                    {
                        return UserService.GetUser(userId, Database);
                    }
                    catch (Exception) { return null; } // Ignore Errors
                }).ToList();
            }

            // Update Last Network Logon Date
            if (Options.DeviceLastNetworkLogon)
            {
                TaskStatus.UpdateStatus(40, "Updating device last network logon dates");
                try
                {
                    TaskStatus.IgnoreCurrentProcessChanges = true;
                    TaskStatus.ProgressMultiplier = 20 / 100;
                    TaskStatus.ProgressOffset = 40;

                    Interop.ActiveDirectory.ADNetworkLogonDatesUpdateTask.UpdateLastNetworkLogonDates(Database, TaskStatus);
                    Database.SaveChanges();

                    TaskStatus.IgnoreCurrentProcessChanges = false;
                    TaskStatus.ProgressMultiplier = 1;
                    TaskStatus.ProgressOffset = 0;
                }
                catch (Exception) { } // Ignore Errors
            }

            TaskStatus.UpdateStatus(60, "Extracting records from the database");

            var records = BuildRecords(Devices).ToList();

            var stream = new MemoryStream();

            TaskStatus.UpdateStatus(80, string.Format("Formatting {0} records for export", records.Count));

            using (StreamWriter writer = new StreamWriter(stream, Encoding.Default, 0x400, true))
            {
                // Header
                writer.Write('"');
                writer.Write(string.Join("\",\"", metadata.Select(m => m.Item2)));
                writer.Write('"');

                // Records
                foreach (var record in records)
                {
                    writer.WriteLine();
                    writer.Write(string.Join(",", metadata.Select(m =>
                    {
                        var value = m.Item3(record);
                        var isString = m.Item4;

                        if (value == null)
                            return null;
                        else if (!isString)
                            return value;
                        else if (Options.ExcelCsvFormat)
                            return string.Concat("=\"", value, "\"");
                        else
                            return string.Concat("\"", value, "\"");
                    })));
                }
            }

            stream.Position = 0;
            return new DeviceExportResult()
            {
                CsvResult = stream,
                RecordCount = records.Count
            };
        }
Example #5
0
 public static DeviceExportResult GenerateExport(DiscoDataContext Database, DeviceExportOptions Options, IScheduledTaskStatus TaskStatus)
 {
     switch (Options.ExportType)
     {
         case DeviceExportTypes.All:
             return GenerateExport(Database, Database.Devices, Options, TaskStatus);
         case DeviceExportTypes.Batch:
             if (Options.ExportTypeTargetId.HasValue && Options.ExportTypeTargetId.Value > 0)
                 return GenerateExport(Database, Database.Devices.Where(d => d.DeviceBatchId == Options.ExportTypeTargetId), Options, TaskStatus);
             else
                 return GenerateExport(Database, Database.Devices.Where(d => d.DeviceBatchId == null), Options, TaskStatus);
         case DeviceExportTypes.Model:
             return GenerateExport(Database, Database.Devices.Where(d => d.DeviceModelId == Options.ExportTypeTargetId), Options, TaskStatus);
         case DeviceExportTypes.Profile:
             return GenerateExport(Database, Database.Devices.Where(d => d.DeviceProfileId == Options.ExportTypeTargetId), Options, TaskStatus);
         default:
             throw new ArgumentException(string.Format("Unknown Device Export Type", Options.ExportType.ToString()), "Options");
     }
 }