示例#1
0
        public Response <object> ChangePasswordForFirstTime(UserChangePasswordForFirstTimeModel _)
        {
            var user       = _repository.GetUserByUsername(_contextAccessor.HttpContext.User.Identity.Name);
            var userBefore = CloneObject.Clone(user);

            //if (user.IdUserAuthorizationType != (int)UserAuthorizationTypeIds.SystemAccount)
            //{
            //    _saveLog.LogInformation("User with Active Directory cannot change password from this system!");
            //    return new Response<object>(PublicResultStatusCodes.NotAllowedOperation);
            //}

            var checkPassword = PasswordHelper.ValidatePassword(_.NewPassword);

            if (checkPassword)
            {
                var hashHelper = new HashHelper(_.NewPassword);
                user.Password                 = hashHelper.Hash;
                user.SaltedPassword           = hashHelper.Salt;
                user.LatestPasswordChangeDate = DateTime.Now;
                user.ChangePasswordNeeded     = false;

                var serials = ConvertToBinaryHelper <User> .SerializeAndConvert(userBefore, user);

                _generalUpdateService.UpdateAddLogDataChange(user, serials.Item1, serials.Item2);

                return(new Response <object>(PublicResultStatusCodes.Done));
            }
            _saveLog.LogInformation("Password must have at least six characters, one upperCase and one number!");
            return(new Response <object>(PublicResultStatusCodes.ModelIsNotValid));
        }
示例#2
0
        public Response <object> ChangePasswordFromResetPasswordLink(ResetPasswordModel _)
        {
            var user       = _repository.GetUserById(_.Id);
            var userBefore = CloneObject.Clone(user);

            //EntryUpdateUserHelper.FillUpdateData(ref user);

            if (user != null)
            {
                var hash = HashHelper.GetSha256FromString(user.Account + " " + user.ID + "$aa$" + user.EntryDate);
                if (!hash.Equals(_.Hash))
                {
                    return(new Response <object>(PublicResultStatusCodes.ModelIsNotValid));
                }

                var hashHelper = new HashHelper(_.Password);
                user.Password                 = hashHelper.Hash;
                user.SaltedPassword           = hashHelper.Salt;
                user.LatestPasswordChangeDate = DateTime.Now;
                user.ResetPasswordToken       = Guid.NewGuid();

                var serials = ConvertToBinaryHelper <User> .SerializeAndConvert(userBefore, user);

                _generalUpdateService.UpdateAddLogDataChange(user, serials.Item1, serials.Item2);

                return(new Response <object>(PublicResultStatusCodes.Done));
            }

            return(new Response <object>(PublicResultStatusCodes.ModelIsNotValid));
        }
示例#3
0
        public Response <object> ChangePassword(UserChangePasswordModel _)
        {
            var user       = _repository.GetUserByUsername(_contextAccessor.HttpContext.User.Identity.Name);
            var userBefore = CloneObject.Clone(user);

            //if (user.IdUserAuthorizationType != (int)UserAuthorizationTypeIds.SystemAccount)
            //{
            //    _saveLog.LogInformation("User with Active Directory cannot change password from this system!");
            //    return new Response<object>(PublicResultStatusCodes.NotAllowedOperation);
            //}

            var checkPassword = HashHelper.Verify(user.SaltedPassword, user.Password, _.OldPassword);

            if (checkPassword)
            {
                var hashHelper = new HashHelper(_.NewPassword);
                user.Password                 = hashHelper.Hash;
                user.SaltedPassword           = hashHelper.Salt;
                user.LatestPasswordChangeDate = DateTime.Now;

                var serials = ConvertToBinaryHelper <User> .SerializeAndConvert(userBefore, user);

                _generalUpdateService.UpdateAddLogDataChange(user, serials.Item1, serials.Item2);

                return(new Response <object>(PublicResultStatusCodes.Done));
            }
            _saveLog.LogInformation("Password do not match with data in Database!");
            return(new Response <object>(PublicResultStatusCodes.WrongOldPassword));
        }
示例#4
0
        public Response <object> ChangePasswordFromProfile(string password)
        {
            var userId = int.Parse(NetworkHelper._contextAccessor.HttpContext.User.FindFirst(ClaimTypes.NameIdentifier).Value);
            var user   = _repository.GetUserById(userId);

            var userBefore = CloneObject.Clone(user);

            //if (user.IdUserAuthorizationType != (int)UserAuthorizationTypeIds.SystemAccount)
            //{
            //    _saveLog.LogInformation("User with Active Directory cannot change password from this system!");
            //    return new Response<object>(PublicResultStatusCodes.NotAllowedOperation);
            //}

            var hashHelper = new HashHelper(password);

            user.Password                 = hashHelper.Hash;
            user.SaltedPassword           = hashHelper.Salt;
            user.LatestPasswordChangeDate = DateTime.Now;

            var serials = ConvertToBinaryHelper <User> .SerializeAndConvert(userBefore, user);

            _generalUpdateService.UpdateAddLogDataChange(user, serials.Item1, serials.Item2);

            return(new Response <object>(PublicResultStatusCodes.Done));
        }
        /// <summary>
        /// 编辑一条记录
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private async void BtnEditClickAsync(object sender, RoutedEventArgs e)
        {
            if (RecordListBox.SelectedItem is Lib.MemberPrizePunishEntity SelectedRec)
            {
                Lib.MemberPrizePunishEntity RecCloneObj = CloneObject <Lib.MemberPrizePunishEntity, Lib.MemberPrizePunishEntity> .Trans(SelectedRec);

                UC_PrizePunishWin AddWin = new UC_PrizePunishWin(RecCloneObj);
                AddWin.Owner = AppSet.AppMainWindow;

                if (AddWin.ShowDialog().Value)
                {
                    ExcuteResult excuteResult = await DataMemberPrizePunishRepository.UpdateRecord(RecCloneObj);

                    if (excuteResult != null && excuteResult.State == 0)
                    {
                        PropertyInfo[] TargetAttris = SelectedRec.GetType().GetProperties();
                        PropertyInfo[] SourceAttris = RecCloneObj.GetType().GetProperties();
                        foreach (PropertyInfo item in SourceAttris)
                        {
                            var tempObj = TargetAttris.Where(x => x.Name.Equals(item.Name, StringComparison.Ordinal)).FirstOrDefault();
                            if (tempObj != null)
                            {
                                item.SetValue(SelectedRec, item.GetValue(RecCloneObj));
                            }
                        }
                    }
                    else
                    {
                        AppFuns.ShowMessage(excuteResult.Msg, Caption: "失败");
                    }
                }
            }
        }
示例#6
0
        internal async Task <EST_DataExportModel> Process_DisplosedAssetList(EST_DataExportModel model, ServiceProgressReportBsm serviceProgressReport)
        {
            if (model == null)
            {
                return(model);
            }
            var returnList = new List <SCAuditBsm>();

            model.DisplosedAssetList.ToList().ForEach(asset =>
            {
                HardwareTemplate_Full newHardwareAsset;

                var bamTemplate = _hardwareAssetService.GetHardwareAsset_Full(asset.SerialNumber).FirstOrDefault();

                if (bamTemplate != null)
                {
                    newHardwareAsset = CloneObject.Clone(bamTemplate);
                }
                else
                {
                    newHardwareAsset = CreateNewItem(asset);
                }

                newHardwareAsset.OwnedBy = null;
                newHardwareAsset.Target_HardwareAssetHasCostCenter = null;
                newHardwareAsset = _hardwareAssetService.SetHardwareAssetStatus(newHardwareAsset, EST_HWAssetStatus.Disposed);
                newHardwareAsset.Target_HardwareAssetHasLocation = null;
                newHardwareAsset.DisposalDate      = DateTime.Now;
                newHardwareAsset.DisposalReference = "Esteem";

                _hardwareAssetService.UpdateTemplate(newHardwareAsset, bamTemplate);

                // Check Update was successful
                var updatedbamTemplate = _hardwareAssetService.GetHardwareAsset_Full(asset.SerialNumber).FirstOrDefault();
                if (updatedbamTemplate?.Target_HardwareAssetHasLocation?.DisplayName != "Esteem")
                {
                    _reportings.Add(new BAM_ReportingBsm()
                    {
                        ServiceProgressReportId        = serviceProgressReport.Id,
                        SerialNumber                   = asset.SerialNumber,
                        AssetStatus                    = EST_HWAssetStatus.Disposed,
                        SCAudit_Item                   = asset,
                        BAM_HardwareTemplate_Exception = updatedbamTemplate,
                        ExceptionMessage               = "Failed to Update"
                    });
                    returnList.Add(asset);
                }
                _billables.Add(new BAM_ReportingBsm()
                {
                    ServiceProgressReportId        = serviceProgressReport.Id,
                    SerialNumber                   = asset.SerialNumber,
                    AssetStatus                    = EST_HWAssetStatus.Disposed,
                    SCAudit_Item                   = asset,
                    BAM_HardwareTemplate_Exception = updatedbamTemplate,
                });
            });
            model.DisplosedAssetList = returnList;
            return(model);
        }
        private Process TryLoadProcessFromQueue()
        {
            if (ProcessesQueue.Count > 0)
            {
                if (Algorithm == SchedulerAlgorithm.FCFS)
                {
                    var processFromQueue = ProcessesQueue[0];


                    //Process can be loaded from queue
                    if (processFromQueue.ArrivalTime <= CurrentTime && processFromQueue.LastEnterTime == -1 ||
                        processFromQueue.LastExitTime + processFromQueue.IOTime <= CurrentTime)
                    {
                        ProcessesQueue.RemoveAt(0);
                        processFromQueue.Status        = ProcessStatus.OnCpu;
                        processFromQueue.LastEnterTime = CurrentTime;


                        return(processFromQueue);
                    }
                }
                else if (Algorithm == SchedulerAlgorithm.SJF)
                {
                    int     shortestJobAvailableDuration = int.MaxValue;
                    int     it = 0;
                    int     processFromQueuePosition = -1;
                    Process processFromQueue         = null;

                    for (; it < ProcessesQueue.Count; it++)
                    {
                        Process p = ProcessesQueue[it];
                        if (((p.ArrivalTime <= CurrentTime && p.LastEnterTime == -1) || (p.LastExitTime + p.IOTime <= CurrentTime && p.LastExitTime != -1)) &&
                            (p.BurstTime < p.RemainingDuration ? p.BurstTime : p.RemainingDuration) < shortestJobAvailableDuration)
                        {
                            processFromQueue             = CloneObject.CloneJson(p);
                            processFromQueuePosition     = it;
                            shortestJobAvailableDuration = p.BurstTime < p.RemainingDuration ? p.BurstTime : p.RemainingDuration;
                        }
                    }

                    if (processFromQueue != null)
                    {
                        ProcessesQueue.RemoveAt(processFromQueuePosition);
                        processFromQueue.Status        = ProcessStatus.OnCpu;
                        processFromQueue.LastEnterTime = CurrentTime;



                        return(processFromQueue);
                    }
                }
            }
            return(null);
        }
示例#8
0
        public HardwareTemplate SetHardwareAssetStatus(HardwareTemplate template, EST_HWAssetStatus hWAssetStatus)
        {
            if (template == null)
            {
                throw new Exception("Template must not be null");
            }

            // Clone the object so we can check the changes
            var newHardwareAsset = CloneObject.Clone(template);

            newHardwareAsset.HardwareAssetStatus = _assetStatusService.GetAssetStatusTemplate(hWAssetStatus);
            return(newHardwareAsset);
        }
示例#9
0
        public HardwareTemplate_Full SetHardwareAssetStatus(HardwareTemplate_Full template, EST_HWAssetStatus hWAssetStatus)
        {
            if (template == null)
            {
                throw new Exception("Template must not be null");
            }

            // Clone the object so we can check the changes
            var newHardwareAsset = CloneObject.Clone(template);

            newHardwareAsset.HardwareAssetStatus = _assetStatusService.HardwareAssetStatusList.FirstOrDefault(x => x.Name == hWAssetStatus.ToDescriptionString());
            return(newHardwareAsset);
        }
示例#10
0
        public HardwareTemplate_Full SetCostCode(HardwareTemplate_Full template, string costCode)
        {
            if (template == null)
            {
                throw new Exception("Template must not be null");
            }

            // Clone the object so we can check the changes
            var newHardwareAsset = CloneObject.Clone(template);

            newHardwareAsset.Target_HardwareAssetHasCostCenter = _costCenterService.CostCenterList.FirstOrDefault(x => x.DisplayName == costCode);
            return(newHardwareAsset);
        }
示例#11
0
        public HardwareTemplate SetAssetTag(HardwareTemplate template, string assetTag)
        {
            if (template == null)
            {
                throw new Exception("Template must not be null");
            }

            // Clone the object so we can check the changes
            var newHardwareAsset = CloneObject.Clone(template);

            newHardwareAsset.AssetTag = assetTag;
            return(newHardwareAsset);
        }
示例#12
0
        internal async Task <EST_DataExportModel> Process_LocationChangeList(EST_DataExportModel model, ServiceProgressReportBsm serviceProgressReport)
        {
            if (model == null)
            {
                return(model);
            }
            var returnList = new List <SCAuditBsm>();

            model.LocationChangeList.ToList().ForEach(asset => {
                HardwareTemplate_Full newHardwareAsset;

                var bamTemplate = _hardwareAssetService.GetHardwareAsset_Full(asset.SerialNumber).FirstOrDefault();

                // If the Location is already set to Esteem then do nothing
                if (bamTemplate != null && bamTemplate.Target_HardwareAssetHasLocation?.DisplayName == "Esteem")
                {
                    return;
                }

                if (bamTemplate != null)
                {
                    newHardwareAsset = CloneObject.Clone(bamTemplate);
                }
                else
                {
                    newHardwareAsset = CreateNewItem(asset);
                }

                newHardwareAsset = _hardwareAssetService.SetLocation(newHardwareAsset, asset.Audit_Dest_Site_Num);
                _hardwareAssetService.UpdateTemplate(newHardwareAsset, bamTemplate);

                // Check Update was successful
                var updatedbamTemplate = _hardwareAssetService.GetHardwareAsset_Full(asset.SerialNumber).FirstOrDefault();
                if (updatedbamTemplate?.Target_HardwareAssetHasLocation?.DisplayName != "Esteem")
                {
                    _reportings.Add(new BAM_ReportingBsm()
                    {
                        ServiceProgressReportId        = serviceProgressReport.Id,
                        SerialNumber                   = asset.SerialNumber,
                        AssetStatus                    = EST_HWAssetStatus.LocationChanged,
                        SCAudit_Item                   = asset,
                        BAM_HardwareTemplate_Exception = newHardwareAsset,
                        ExceptionMessage               = "Failed to Update"
                    });
                    returnList.Add(asset);
                }
            });
            model.LocationChangeList = returnList;
            return(model);
        }
示例#13
0
        internal async Task <EST_DataExportModel> Process_AssetTagChangeList(EST_DataExportModel model, ServiceProgressReportBsm serviceProgressReport)
        {
            if (model == null)
            {
                return(model);
            }
            var returnList = new List <SCAuditBsm>();

            model.AssetTagChangeList.ToList().ForEach(asset => {
                HardwareTemplate newHardwareAsset;

                var bamTemplate = _hardwareAssetService.GetHardwareAsset_Full(asset.SerialNumber).FirstOrDefault();

                // If the Asset isn't null and the Tag is already correct then just return
                if (bamTemplate != null && bamTemplate.AssetTag == asset.Audit_Part_Num)
                {
                    return;
                }
                else if (bamTemplate != null)
                {
                    newHardwareAsset = CloneObject.Clone(bamTemplate);
                }
                else
                {
                    newHardwareAsset = CreateNewItem(asset);
                }

                newHardwareAsset = _hardwareAssetService.SetAssetTag(newHardwareAsset, asset.Audit_Part_Num);
                _hardwareAssetService.UpdateTemplate(newHardwareAsset, bamTemplate);

                // Check Update was successful
                var updatedbamTemplate = _hardwareAssetService.GetHardwareAsset_Full(asset.SerialNumber).FirstOrDefault();
                if (updatedbamTemplate?.AssetTag != asset.Audit_Part_Num)
                {
                    _reportings.Add(new BAM_ReportingBsm()
                    {
                        ServiceProgressReportId        = serviceProgressReport.Id,
                        SerialNumber                   = asset.SerialNumber,
                        AssetStatus                    = EST_HWAssetStatus.AssetTagChanged,
                        SCAudit_Item                   = asset,
                        BAM_HardwareTemplate_Exception = updatedbamTemplate,
                        ExceptionMessage               = "Failed to Update"
                    });
                    returnList.Add(asset);
                }
            });
            model.AssetTagChangeList = returnList;
            return(model);
        }
示例#14
0
        static void Main(string[] args)
        {
            Pessoa pesoa1 = new Pessoa();

            pesoa1.Id        = 1234;
            pesoa1.Nome      = "João";
            pesoa1.UsaOculos = true;


            Pessoa pessoa2 = new Pessoa();

            CloneObject.CopyValues <Pessoa>(pessoa2, pesoa1);

            Console.ReadKey();
        }
示例#15
0
        public HardwareTemplate_Full SetHardwareAssetPrimaryUser(HardwareTemplate_Full template, string userName)
        {
            if (template == null)
            {
                throw new Exception("Template must not be null");
            }

            // Clone the object so we can check the changes
            var newHardwareAsset = CloneObject.Clone(template);

            newHardwareAsset.OwnedBy = new OwnedBy
            {
                BaseId = _userService.UserList.FirstOrDefault(x => x.Name == userName).Id
            };
            return(newHardwareAsset);
        }
示例#16
0
        public HardwareTemplate_Full SetUser(HardwareTemplate_Full template, BAM_User user)
        {
            if (template == null)
            {
                throw new Exception("Template must not be null");
            }

            // Clone the object so we can check the changes
            var newHardwareAsset = CloneObject.Clone(template);

            newHardwareAsset.OwnedBy = new OwnedBy
            {
                BaseId = user.Id
            };
            return(newHardwareAsset);
        }
        public async Task B03_Update_Basic()
        {
            var serialNumber = "CNU0183F33";

            Guid.TryParse("acdcedb7-100c-8c91-d664-4629a218bd94", out var objectStatusId);

            var updateAssetStatus    = EST_HWAssetStatus.Retired;
            var originalModifiedDate = new DateTime();
            var updatedModifiedDate  = new DateTime();

            var hardwareAssetService = new BAM_HardwareAssetServices();
            var result = hardwareAssetService.GetHardwareAsset(serialNumber);

            var originalhardwareAsset = result.First();

            originalModifiedDate = (DateTime)originalhardwareAsset.LastModified;

            var newHardwareAsset = CloneObject.Clone(originalhardwareAsset);

            // hardwareAssetService.SetHardwareAssetStatus(originalhardwareAsset, updateAssetStatus);
            newHardwareAsset.AssetTag = "Hugh Test";
            //newHardwareAsset.BaseId = null;
            //newHardwareAsset.TimeAdded =
            newHardwareAsset.ObjectStatus = new ObjectStatus()
            {
                Id = objectStatusId.ToString()
            };

            //newHardwareAsset.LastModified = DateTime.Now;
            List <HardwareTemplate> hardwareAssetList = new List <HardwareTemplate>();

            hardwareAssetList = hardwareAssetService.UpdateTemplate(newHardwareAsset, originalhardwareAsset);
            Assert.IsNotNull(hardwareAssetList, "Return list is null");
            Assert.IsTrue(hardwareAssetList.Count > 1, "Return list doesn't include 2 records");

            var updatedHardwareAsset = hardwareAssetService.GetHardwareAsset(serialNumber).FirstOrDefault();

            Assert.IsNotNull(updatedHardwareAsset, "Updated Asset is null");
            Assert.IsTrue(updatedHardwareAsset.SerialNumber == serialNumber, "SerialNumbers don't match");

            updatedModifiedDate = (DateTime)updatedHardwareAsset.LastModified;

            Assert.IsTrue(updatedModifiedDate != originalModifiedDate, "Original and Updated LastModified Date are the same");
            Assert.IsTrue(updatedModifiedDate > originalModifiedDate, "Updated LastModified Date is not greater that the Original");
        }
示例#18
0
        public HardwareTemplate_Full SetLocation(HardwareTemplate_Full template, string siteLocation)
        {
            if (template == null)
            {
                throw new Exception("Template must not be null");
            }

            // Clone the object so we can check the changes
            var newHardwareAsset = CloneObject.Clone(template);

            //if (siteLocation == "Esteem" || siteLocation == "LTX")
            //{
            newHardwareAsset.Target_HardwareAssetHasLocation = new TargetHardwareAssetHasLocation
            {
                BaseId = "ae7423eb-0952-d69c-4d7d-77f1699bfe92",
            };
            //}
            return(newHardwareAsset);
        }
示例#19
0
        public Response <UserModel> Update(int id, EditUserModel _)
        {
            var entryUser = _repository.GetUserByUsername(_contextAccessor.HttpContext.User?.Identity?.Name);

            var user = _repository.GetUserById(id);

            if (user == null)
            {
                _saveLog.LogInformation("Failed to Update User because user with Id=\"" + id + "\" does not exist");
                return(new Response <UserModel>(PublicResultStatusCodes.ModelIsNotValid));
            }

            var beforeUser = CloneObject.Clone(user);

            if (!string.IsNullOrWhiteSpace(_.Password))
            {
                var hashHelper = new HashHelper(_.Password);
                user.Password                 = hashHelper.Hash;
                user.SaltedPassword           = hashHelper.Salt;
                user.LatestPasswordChangeDate = DateTime.Now;
            }

            user.Account                 = _.Account;
            user.First                   = _.First;
            user.Last                    = _.Last;
            user.IsActive                = _.IsActive;
            user.ExpireDate              = _.ExprieDate;
            user.IDRole                  = _.IdRole;
            user.EmailAddress            = _.EmailAddress;
            user.IDUserAuthorizationType = _.IdUserAuthorizationType;
            //user.WithUserAuthorization = _.WithUserAuthorization;
            // user.SerialNumber = _.SerialNumber;
            //user.IdEmployee = _.IdEmployee;
            EntryUpdateUserHelper.FillUpdateData(ref user);


            var serials = ConvertToBinaryHelper <User> .SerializeAndConvert(beforeUser, user);

            _generalUpdateService.UpdateAddLogDataChange(user, serials.Item1, serials.Item2);

            return(new Response <UserModel>(PublicResultStatusCodes.Done));
        }
        private void buttonLoadFromFile_Click(object sender, EventArgs e)
        {
            string line;

            OpenFileDialog dialog = new OpenFileDialog();

            dialog.Filter      = "Text files | *.txt";
            dialog.Multiselect = false;
            if (dialog.ShowDialog() == DialogResult.OK)
            {
                String path = dialog.FileName;
                using (StreamReader reader = new StreamReader(new FileStream(path, FileMode.Open), new UTF8Encoding()))
                {
                    while ((line = reader.ReadLine()) != null)
                    {
                        string[] bits = line.Split(' ');

                        var priorityString = "0";
                        int duration       = Int32.Parse(bits[1]);
                        int arrivalTime    = Int32.Parse(bits[0]);
                        int priority       = Int32.Parse(priorityString);
                        int burstTime      = Int32.Parse(bits[2]);
                        int ioTime         = Int32.Parse(bits[3]);

                        if (ioTime == 0)
                        {
                            burstTime = duration;
                            bits[2]   = bits[1];
                        }

                        Process newProcess = new Process(Global.Scheduler.ProcessesList.Count + 1, duration, arrivalTime, priority, burstTime, ioTime);
                        Global.Scheduler.ProcessesList.Add(newProcess);
                        Global.ProcessesInList.Add(CloneObject.CloneJson(newProcess));

                        Input.AddProcessToTable(dataGridViewProcessesList, newProcess.Id, bits[1], bits[0], priorityString, bits[2], bits[3]);
                    }

                    reader.Close();
                }
            }
        }
示例#21
0
        public Response <object> ChangePassword(AdminChangePasswordModel _)
        {
            var user       = _repository.GetUserById(_.IdUser);
            var userBefore = CloneObject.Clone(user);

            //if (user.IdUserAuthorizationType != (int)UserAuthorizationTypeIds.SystemAccount)
            //{
            //    _saveLog.LogInformation("User with Active Directory cannot change password from this system!");
            //    return new Response<object>(PublicResultStatusCodes.NotAllowedOperation);
            //}
            var hashHelper = new HashHelper(_.NewPassword);

            user.Password                 = hashHelper.Hash;
            user.SaltedPassword           = hashHelper.Salt;
            user.LatestPasswordChangeDate = DateTime.Now;

            var serials = ConvertToBinaryHelper <User> .SerializeAndConvert(userBefore, user);

            _generalUpdateService.UpdateAddLogDataChange(user, serials.Item1, serials.Item2);

            return(new Response <object>(PublicResultStatusCodes.Done));
        }
        //Add new process inside our table (list) and Scheduler memory
        private void buttonInput_Click(object sender, EventArgs e)
        {
            var durationString    = textBoxDuration.Text;
            var arrivalTimeString = textBoxArrivalTime.Text;
            var priorityString    = "0";
            //var priorityString = textBoxPriority.Text;
            var burstTimeString = textBoxBurstTime.Text;
            var ioTimeString    = textBoxIOTime.Text;

            string inputErrors = Input.CheckInputErrors(durationString, arrivalTimeString, priorityString, burstTimeString, ioTimeString);

            if (!String.IsNullOrEmpty(inputErrors))
            {
                MessageBox.Show(inputErrors);
            }
            else
            {
                int duration    = Int32.Parse(durationString);
                int arrivalTime = Int32.Parse(arrivalTimeString);
                int priority    = Int32.Parse(priorityString);
                int burstTime   = Int32.Parse(burstTimeString);
                int ioTime      = Int32.Parse(ioTimeString);

                if (ioTime == 0)
                {
                    burstTime       = duration;
                    burstTimeString = durationString;
                }

                Process newProcess = new Process(Global.Scheduler.ProcessesList.Count + 1, duration, arrivalTime, priority, burstTime, ioTime);
                Global.Scheduler.ProcessesList.Add(newProcess);
                Global.ProcessesInList.Add(CloneObject.CloneJson(newProcess));

                Input.AddProcessToTable(dataGridViewProcessesList, newProcess.Id, durationString, arrivalTimeString, priorityString, burstTimeString, ioTimeString);
            }
        }
        private void buttonStartSimulation_Click(object sender, EventArgs e)
        {
            if (Global.Scheduler.ProcessesList.Count == 0)
            {
                MessageBox.Show("Insert at least one process before starting the simulation.");
            }
            else
            {
                if (radioButtonFCFS.Checked)
                {
                    Global.Scheduler = new Scheduler();
                    if (Global.ProcessesInList.Count > 0)
                    {
                        Global.Scheduler.ProcessesList = CloneObject.CloneJson(Global.ProcessesInList);
                    }
                    Global.Scheduler.Algorithm = SchedulerAlgorithm.FCFS;
                    Global.Scheduler.solveFCFS();
                    Global.Scheduler.ComputeData();

                    buttonGanttChart.Visible = true;
                }
                else if (radioButtonSJF.Checked)
                {
                    Global.Scheduler = new Scheduler();
                    if (Global.ProcessesInList.Count > 0)
                    {
                        Global.Scheduler.ProcessesList = CloneObject.CloneJson(Global.ProcessesInList);
                    }
                    Global.Scheduler.Algorithm = SchedulerAlgorithm.SJF;
                    Global.Scheduler.solveSJF();
                    Global.Scheduler.ComputeData();

                    buttonGanttChart.Visible = true;
                }
                else if (radioButtonBoth.Checked)
                {
                    //FCFS
                    Global.Scheduler = new Scheduler();
                    if (Global.ProcessesInList.Count > 0)
                    {
                        Global.Scheduler.ProcessesList = CloneObject.CloneJson(Global.ProcessesInList);
                    }
                    Global.Scheduler.Algorithm = SchedulerAlgorithm.FCFS;
                    Global.Scheduler.solveFCFS();
                    Global.Scheduler.ComputeData();

                    cpuChart.Series["Average Response Time"].Points.AddY(Global.Scheduler.AverageResponseTime);
                    cpuChart.Series["Average Waiting Time"].Points.AddY(Global.Scheduler.AverageWaitingTime);
                    cpuChart.Series["Average Turnaround Time"].Points.AddY(Global.Scheduler.AverageTurnaroundTime);
                    cpuChart.Series["Average CPU Utilisation"].Points.AddY(Global.Scheduler.AverageCPUUtilisation);
                    cpuChart.Series["Average No of Waiting Processes"].Points.AddY(Global.Scheduler.AverageWaitingProcesses);

                    //SJF
                    Global.Scheduler = new Scheduler();
                    if (Global.ProcessesInList.Count > 0)
                    {
                        Global.Scheduler.ProcessesList = CloneObject.CloneJson(Global.ProcessesInList);
                    }
                    Global.Scheduler.Algorithm = SchedulerAlgorithm.SJF;
                    Global.Scheduler.solveSJF();
                    Global.Scheduler.ComputeData();

                    buttonGanttChart.Visible = false;
                }

                cpuChart.Series["Average Response Time"].Points.AddY(Global.Scheduler.AverageResponseTime);
                cpuChart.Series["Average Waiting Time"].Points.AddY(Global.Scheduler.AverageWaitingTime);
                cpuChart.Series["Average Turnaround Time"].Points.AddY(Global.Scheduler.AverageTurnaroundTime);
                cpuChart.Series["Average CPU Utilisation"].Points.AddY(Global.Scheduler.AverageCPUUtilisation);
                cpuChart.Series["Average No of Waiting Processes"].Points.AddY(Global.Scheduler.AverageWaitingProcesses);
            }
        }
示例#24
0
        /// <summary>
        /// 将考勤记录导入数据库.
        /// </summary>
        /// <param name="xlsFilePath"></param>
        /// <param name="randomStr"></param>
        /// <param name="pb"></param>
        /// <returns></returns>
        public static MSG  ImportAttendanceRecordToDB(string xlsFilePath, string randomStr, BackgroundWorker bgWork)
        {
            string excelName = Usual_Excel_Helper.getExcelName(xlsFilePath);

            bgWork.ReportProgress(0, string.Format(@"lblPrompt.Text = {0},准备读取:", excelName));
            int pbLength = 0;

            bgWork.ReportProgress(pbLength, "pb.Maximum");
            int pbValue = 0;

            bgWork.ReportProgress(pbValue, "pb.Value");
            MSG msg = new MSG();

            //用于确定本月最后一天.
            Stack <int> sDate = new Stack <int>();
            //Queue<AttendanceR> qAttendanceR = new Queue<AttendanceR>();
            Queue <AttendanceRecordDetail> qARDetail = new Queue <AttendanceRecordDetail>();

            AttendanceRecordDetail._random_str = randomStr;
            //按指纹日期
            string fingerPrintDate = String.Empty;

            //行最大值.
            int rowsMaxCount            = 0;
            int colsMaxCount            = 0;
            Usual_Excel_Helper uEHelper = null;

            MyExcel myExcel = new MyExcel(xlsFilePath);

            //打开该文档。
            myExcel.openWithoutAlerts();
            //只获取第一个表格。
            Worksheet ws = myExcel.getFirstWorkSheetAfterOpen();

            bgWork.ReportProgress(0, string.Format(@"lblPrompt.Text = {0},正在读取:", excelName));
            AttendanceRecordDetail._file_path = xlsFilePath;
            //行;列最大值 赋值.
            rowsMaxCount = ws.UsedRange.Rows.Count;
            colsMaxCount = ws.UsedRange.Columns.Count;


            AttendanceRecordDetail._sheet_name = ws.Name;
            //判断首行是否为 考勤记录表;以此判断此表是否为考勤记录表.
            string A1Str = ((Range)ws.Cells[1, 1]).Text.ToString().Trim().Replace("\n", "").Replace("\r", "").Replace(" ", "");

            if (String.IsNullOrEmpty(A1Str))
            {
                msg.Msg  = "工作表的A1单元格不能为空!";
                msg.Flag = false;
                myExcel.close();
                return(msg);
            }
            //如果A1Str的内容不包含"考勤记录表"5个字。
            if (!A1Str.Contains("考勤记录表"))
            {
                msg.Msg  = "A1内容未包含'考勤记录表'";
                msg.Flag = false;
                myExcel.close();
                return(msg);
            }
            #region 判断名称中是否区分了考勤记录。
            string Seq_Attendance_Record = string.Empty;
            int    indexOfFullStop       = xlsFilePath.LastIndexOf(".");
            Seq_Attendance_Record = xlsFilePath.Substring(indexOfFullStop - 1, 1);
            if (!CheckPattern.CheckNumber(Seq_Attendance_Record))
            {
                msg.Msg  = "考勤记录表名称请以数字结尾!";
                msg.Flag = false;
                myExcel.close();
                return(msg);
            }
            #endregion

            AttendanceRecordDetail._prefix_Job_Number = excelName.Substring(excelName.Length - 1, 1).ToCharArray()[0];
            string C3Str = ((Range)ws.Cells[3, 3]).Text.ToString().Trim();
            //  \0: 表空字符.
            if (String.IsNullOrEmpty(C3Str))
            {
                msg.Msg  = "异常: 考勤时间为空!";
                msg.Flag = false;
                myExcel.close();
                return(msg);
            }
            //
            string[] ArrayC3 = C3Str.Split('~');
            if (ArrayC3.Length == 0)
            {
                msg.Msg  = "异常: 考勤时间格式变更!";
                msg.Flag = false;
                myExcel.close();
                return(msg);
            }
            AttendanceRecordDetail._start_date = ArrayC3[0].ToString().Trim().Replace('/', '-');
            AttendanceRecordDetail._end_date   = ArrayC3[1].ToString().Trim().Replace('/', '-');
            //制表时间:  L3 3行12列.
            string L3Str = ((Range)ws.Cells[3, 12]).Text.ToString().Trim().Replace('/', '-');
            if (String.IsNullOrEmpty(L3Str))
            {
                msg.Msg  = "异常: 制表时间为空!";
                msg.Flag = false;
                myExcel.close();
                return(msg);
            }
            //制表时间.
            AttendanceRecordDetail._tabulation_time = L3Str;
            //检查第4行是否为;考勤时间:
            string A4Str = ((Range)ws.Cells[4, 1]).Text.ToString().Trim();
            if (!"1".Equals(A4Str, StringComparison.CurrentCultureIgnoreCase))
            {
                msg.Msg  = "异常: 第四行已变更!";
                msg.Flag = false;
                myExcel.close();
                return(msg);
            }
            uEHelper = new Usual_Excel_Helper(ws);
            //此刻不能删除,只是获取行号。
            Queue <Range> rangeToDelQueue = new Queue <Range>();
            //判断是否有空行。
            for (int i = 5; i <= rowsMaxCount; i++)
            {
                if (uEHelper.isBlankRow(i))
                {
                    //只要上一列不是
                    //删除掉此行。
                    //判断上一行中的A列是否为工号。
                    string temp = uEHelper.getSpecificCellValue("A" + (i - 1).ToString());
                    if ("工号:".Equals(temp))
                    {
                        //本行为空,上一行为工号行,则也统计。
                        continue;
                    }
                    //本行,为空,上一行非工号行。则删除本行。
                    Range rangeToDel = (Microsoft.Office.Interop.Excel.Range)uEHelper.WS.Rows[i, System.Type.Missing];
                    //不为工号
                    rangeToDelQueue.Enqueue(rangeToDel);
                }
                ;
            }
            Range rangeToDelete;
            //开始删除空行。
            while (rangeToDelQueue.Count > 0)
            {
                rangeToDelete = rangeToDelQueue.Dequeue();
                rangeToDelete.Delete(XlDeleteShiftDirection.xlShiftUp);
            }
            ;
            rowsMaxCount = ws.UsedRange.Rows.Count;
            //进度条长度增加。
            pbLength += colsMaxCount;
            pbLength += (colsMaxCount * (rowsMaxCount - 5 + 1));
            bgWork.ReportProgress(pbLength, "pb.Maximum");
            //入队列值0
            sDate.Push(0);
            //显示进度条。
            //考勤表中第4行,某月的最大考勤天数。
            //lblPrompt.Text = excelName + ",正在读取:";

            int actualMaxDay = 0;
            //开始循环
            for (int i = 1; i <= colsMaxCount; i++)
            {
                A4Str = ((Range)ws.Cells[4, i]).Text.ToString();
                //碰到第4行某列为空,退出循环。
                if (String.IsNullOrEmpty(A4Str))
                {
                    break;
                }
                int aDate = 0;
                //对A4Str进行分析.
                if (!Int32.TryParse(A4Str, out aDate))
                {
                    msg.Msg  = String.Format(@"异常: 考勤日期行第{0}列出现非数字内容!", aDate);
                    msg.Flag = false;
                    myExcel.close();
                    return(msg);
                }
                //判断新增的日期是否大于上一个.
                if (aDate <= sDate.Peek())
                {
                    //跳出循环.
                    break;
                }
                actualMaxDay++;
                sDate.Push(aDate);
                //pb.Value++;
                bgWork.ReportProgress(pbValue++, "pb.Value");
            }
            //取其中的最小值。
            colsMaxCount = Math.Min(sDate.Count - 1, actualMaxDay);
            //考勤日期
            fingerPrintDate = AttendanceRecordDetail._start_date.Substring(0, 7).Replace('/', '-');
            string tempStr = string.Empty;
            //开始循环
            for (int colIndex = 1; colIndex <= colsMaxCount; colIndex++)
            {
                //从第5行开始.
                //奇数;偶数行共用一个对象.
                AttendanceRecordDetail ARDetail = null;
                //设定用于填充的对象
                AttendanceRecordDetail._prefix_Job_Number = Seq_Attendance_Record.ToCharArray()[0];
                for (int rowIndex = 5; rowIndex <= rowsMaxCount; rowIndex++)
                {
                    //如果行数为奇数则为工号行.
                    if (rowIndex % 2 == 1)
                    {
                        //工号行.
                        //取工号
                        ARDetail            = new AttendanceRecordDetail();
                        ARDetail.Job_number = ((Range)ws.Cells[rowIndex, 3]).Text.ToString().Trim();
                        //自行拼凑AR.
                        ARDetail.combine_Job_Number();
                        //取姓名:  K5
                        ARDetail.Name = ((Range)ws.Cells[rowIndex, Usual_Excel_Helper.getColIndexByStr("K")]).Text.ToString().Trim();
                        //取部门: U5
                        ARDetail.Dept = ((Range)ws.Cells[rowIndex, Usual_Excel_Helper.getColIndexByStr("U")]).Text.ToString().Trim();
                        //部门为空,则填充为NULL;
                        ARDetail.Dept = !String.IsNullOrEmpty(ARDetail.Dept) ? ARDetail.Dept : "NULL";
                        //取日期.填充0;
                        ARDetail.Fingerprint_date = fingerPrintDate + "-" + colIndex.ToString().PadLeft(2, '0');
                    }
                    else
                    {
                        //偶数行取考勤结果.
                        //上班时间. 如B10;
                        tempStr = ((Range)ws.Cells[rowIndex, colIndex]).Text.ToString().Trim();
                        string        tempFirstTime = String.Empty;
                        string        tempLastTime  = String.Empty;
                        List <string> strTimeList   = null;
                        msg = getFPTimeReturnMSG(tempStr, out strTimeList);
                        if (!msg.Flag)
                        {
                            msg.Msg = string.Format(@"导入失败,提交数据尚未开始:第{0}行{1}列,{1}!", rowIndex, colIndex, msg.Msg);
                            myExcel.close();
                            return(msg);
                        }
                        ;
                        //无打卡记录,不提交
                        if (strTimeList.Count == 0)
                        {
                            qARDetail.Enqueue(ARDetail);
                        }
                        //有打卡记录
                        for (int i = 0; i < strTimeList.Count; i++)
                        {
                            AttendanceRecordDetail ARDetailTemp = (AttendanceRecordDetail)CloneObject.Clone(ARDetail);
                            ARDetailTemp.Finger_print_time = ARDetailTemp.Fingerprint_date + " " + strTimeList[i].ToString();
                            qARDetail.Enqueue(ARDetailTemp);
                        }
                    }
                    //pb.Value++;
                    bgWork.ReportProgress(pbValue++, "pb.Value");
                }
            }
            //释放对象
            myExcel.close();
            System.Threading.Thread.Sleep(2000);
            GC.Collect();
            GC.WaitForPendingFinalizers();
            //lblResult.Text = "";
            bgWork.ReportProgress(0, "lblResult.Text = ''");
            //lblPrompt.Text = "提交数据: ";
            bgWork.ReportProgress(0, string.Format(@"lblPrompt.Text = {0}, 提交数据:", excelName));
            //
            bgWork.ReportProgress(qARDetail.Count, "pb.Maximum");
            //*******/
            pbValue = 0;
            bgWork.ReportProgress(pbValue, "pb.Value");
            #region
            //OracleDaoHelper.noLogging("Attendance_Record");
            OracleDaoHelper.noLogging("Attendance_Record_Detail");
            OracleConnection  conn = OracleConnHelper.getConn();
            OracleTransaction tran = conn.BeginTransaction();
            //保存对象
            while (qARDetail.Count > 0)
            {
                try
                {
                    AttendanceRecordDetail aRDetail = qARDetail.Dequeue();

                    affectedCount += aRDetail.saveBySpecificConn(conn);
                    //pb.Value++;
                    bgWork.ReportProgress(pbValue++, "pb.Value");
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString(), "提示:", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    msg.Msg  = DirectoryHelper.getFileName(xlsFilePath) + ":导入失败; " + ex.ToString();
                    msg.Flag = false;
                    tran.Rollback();
                    conn.Close();
                    conn.Dispose();
                    return(msg);

                    throw;
                }
            }
            tran.Commit();
            conn.Close();
            conn.Dispose();
            #endregion
            //OracleDaoHelper.logging("Attendance_Record");
            OracleDaoHelper.logging("Attendance_Record_Detail");
            msg.Flag = true;
            msg.Msg  = String.Format(@"导入完成;总计{0}条.", affectedCount.ToString());
            return(msg);
        }
示例#25
0
        private void SetInitialValues()
        {
            ModifiedOrder = CloneObject.CloneObjectSerializable <OrderModel>(Order);

            RemovedOrderProducts = new List <OrderProductModel>();

            // Order info
            OrderIdValue.Text      = Order.Id.ToString();
            OrderDateValue.Text    = Order.DateTimeOfTheOrder.ToString();
            StaffNameValue.Text    = Order.Staff.Person.FullName;
            StoreNameValue.Text    = Order.Store.Name;
            CustomerNameValue.Text = Order.Customer.Person.FullName;

            OrderTotalPriceValue.Value        = Order.GetTotalPrice;
            TotalPriceAfterChangesValue.Value = Order.GetTotalPrice;

            TotalProfitValue.Value             = Order.GetTotalProfit;
            TotalProfitAfterChangesValue.Value = Order.GetTotalProfit;

            OrderDetailsValue.Text = Order.Details;

            // Order Payments
            OrderPaymentsList.ItemsSource = null;
            OrderPaymentsList.ItemsSource = Order.OrderPayments;

            OrderProductList.ItemsSource = null;
            OrderProductList.ItemsSource = ModifiedOrder.OrderProducts;

            RemovedOrderProductList.ItemsSource = null;
            RemovedOrderProductList.ItemsSource = RemovedOrderProducts;

            SelectedOrderProductQuantityValue.Value = 0;

            TotalPaidValue.Value     = Order.GetTotalPaid;
            ShoppeeWalletValue.Value = PublicVariables.Store.GetShopeeWallet;

            if (ModifiedOrder.GetOrderState == "DONE")
            {
                CustomerShouldPayValue.Value     = 0;
                CustomerShouldReceiveValue.Value = 0;

                StoreWillPayNowValue.Value   = 0;
                StoreWillPayLaterValue.Value = 0;

                CustomerWillPayNowValue.Value   = 0;
                CustomerWillPayLaterValue.Value = 0;
            }
            else if (ModifiedOrder.GetOrderState == "Customer Should Pay")
            {
                CustomerShouldPayValue.Value     = ModifiedOrder.GetTotalNotPaid;
                CustomerShouldReceiveValue.Value = 0;

                CustomerWillPayNowValue.Value   = ModifiedOrder.GetTotalNotPaid;
                CustomerWillPayLaterValue.Value = 0;

                StoreWillPayNowValue.Value   = 0;
                StoreWillPayLaterValue.Value = 0;
            }
            else if (ModifiedOrder.GetOrderState == "Customer Should Receive")
            {
                CustomerShouldPayValue.Value     = 0;
                CustomerShouldReceiveValue.Value = ModifiedOrder.GetCustomerShouldReceive;

                StoreWillPayNowValue.Value   = ModifiedOrder.GetCustomerShouldReceive;
                StoreWillPayLaterValue.Value = 0;

                CustomerWillPayNowValue.Value   = 0;
                CustomerWillPayLaterValue.Value = 0;
            }
            else
            {
                CustomerShouldPayValue.Value = 0;

                CustomerShouldReceiveValue.Value = 0;
            }
        }
示例#26
0
        private void Print_Click(object sender, RoutedEventArgs e)
        {
            //If you reduce the size of the view area of the window, so the text does not all fit into one page, it will print separate pages
            string        str         = " If you reduce the size of the view area of the window, so \nthe text does not all fit into one page, it will print separate pages ";
            List <string> PrinterList = new List <string>();
            /*******************************/
            //printicket
            PrintTicket ticket = new PrintTicket();

            ticket.PageMediaSize   = new PageMediaSize(100, 100);
            ticket.PageOrientation = PageOrientation.Portrait;
            ticket.PageOrder       = PageOrder.Standard;


            LocalPrintServer     prntserver      = new LocalPrintServer();
            PrintQueueCollection queueCollection = prntserver.GetPrintQueues();
            PrintDialog          printDialog     = new PrintDialog();

            foreach (string printer in System.Drawing.Printing.PrinterSettings.InstalledPrinters)
            {
                PrinterList.Add(printer);
                //MessageBox.Show(printer);
            }
            PageRange pr = new PageRange(1, 3);

            string[] tempPrint     = PrinterList.ToArray();
            string   printFullName = printDialog.PrintQueue.FullName;

            printDialog.PrintQueue  = prntserver.GetPrintQueue(PrinterList[0]);
            printDialog.PrintTicket = ticket;
            printDialog.PageRange   = pr;
            //DocumentPaginator paginatro = new DocumentPaginator();



            /***************************************************************/
            // add exptra pages
            FixedPage     page = new FixedPage();
            FixedDocument Doc  = new FixedDocument();


            //if(printDialog.ShowDialog() == true)
            //printDialog.PrintDocument(((IDocumentPaginatorSource)flowDocument).DocumentPaginator, str + "This is a Flow Document");

            string NewSelectedPrinter = printDialog.PrintQueue.FullName;


            /*****************new code*********************/

            // select printer and get printer settings
            PrintDialog pd = new PrintDialog();
            //if (pd.ShowDialog() != true) return;
            //Create a document
            double width  = 400;
            double height = 600;

            FixedDocument fxDoc = new FixedDocument();

            fxDoc.DocumentPaginator.PageSize = new Size(width, height);

            // Create fixed page1
            //FixedPage page1 = new FixedPage();
            //page1.Width = width;
            //page1.Height = height;

            //// Create fixed page2
            //FixedPage page2 = new FixedPage();
            //page2.Width = width;
            //page2.Height = height;

            ////Add some text1
            TextBlock tx1 = new TextBlock();
            //tx1.Width = width;
            //tx1.FontSize = 12;
            //tx1.Text = " Page1 And add the page to the document, this is a little tricky because we need to use a PageContent object as an intermediary and it looks like there is no way to add the page to the page content, the trick is to use the IAddChild interface – according to the documentation you’re not supposed to use IAddChild directly but it’s the only way to build a fixed document.";
            //tx1.TextAlignment = TextAlignment.Justify;
            //tx1.TextWrapping = TextWrapping.Wrap;
            //page1.Children.Add(tx1);

            ////Add some text2
            //tx1 = new TextBlock();
            //tx1.Width = width;
            //tx1.FontSize = 20;
            //tx1.Text = "  Page 2 And add the page to the document, this is a little tricky because we need to use a PageContent object as an intermediary and it looks like there is no way to add the page to the page content, the trick is to use the IAddChild interface – according to the documentation you’re not supposed to use IAddChild directly but it’s the only way to build a fixed document.";
            //tx1.TextAlignment = TextAlignment.Justify;
            //tx1.TextWrapping = TextWrapping.Wrap;
            //page2.Children.Add(tx1);



            // add page to document bye PageContent object
            //PageContent pgCont = new PageContent();
            //pgCont.Child = page1;
            //fxDoc.Pages.Add(pgCont);
            //pgCont = new PageContent();
            //pgCont.Child = page2;
            //fxDoc.Pages.Add(pgCont);

            FixedPage page1;
            Grid      grd1;
            TextBlock tx2;

            fxDoc = new FixedDocument();
            FixedDocument fixDocument2 = new FixedDocument();
            PageContent   pgCont       = new PageContent();
            Grid          grd;

            FixedPage[] pageCollection = new FixedPage[10];
            //List<FixedPage> listPageCollection = new List<FixedPage>();
            for (int i = 0; i < 8; i++)
            {
                //CreatePage
                page        = new FixedPage();
                page.Name   = "Page" + i;
                page.Width  = width;
                page.Height = height;
                /***********(2)*************/
                page1        = new FixedPage();
                page1.Name   = "Page" + i;
                page1.Width  = width;
                page1.Height = height;

                //Add text to Page.
                grd       = new Grid();
                grd.Width = width;
                /*******(2)**********/
                grd1       = new Grid();
                grd1.Width = width;

                //Grid
                RowDefinition row = new RowDefinition();
                grd.RowDefinitions.Add(row);
                row = new RowDefinition();
                grd.RowDefinitions.Add(row);
                /************(2)******************/
                RowDefinition row1 = new RowDefinition();
                grd1.RowDefinitions.Add(row1);
                row1 = new RowDefinition();
                grd1.RowDefinitions.Add(row1);

                //Header TextBlock
                tx1               = new TextBlock();
                tx1.Width         = width;
                tx1.FontSize      = 20;
                tx1.Text          = "Page Index " + i;
                tx1.TextAlignment = TextAlignment.Center;
                //tx1.TextWrapping = TextWrapping.Wrap;
                Grid.SetRow(tx1, 0);
                grd.Children.Add(tx1);
                /***********(2)**************/
                //Header TextBlock
                tx2               = new TextBlock();
                tx2.Width         = width;
                tx2.FontSize      = 20;
                tx2.Text          = "Page Index " + i;
                tx2.TextAlignment = TextAlignment.Center;
                //tx1.TextWrapping = TextWrapping.Wrap;
                Grid.SetRow(tx2, 0);
                grd1.Children.Add(tx2);



                //Paragraph
                tx1               = new TextBlock();
                tx1.Width         = width;
                tx1.FontSize      = 14;
                tx1.Text          = "Page " + i + " And add the page to the document, this is a little tricky because we need to use a PageContent object as an intermediary and it looks like there is no way to add the page to the page content, the trick is to use the IAddChild interface – according to the documentation you’re not supposed to use IAddChild directly but it’s the only way to build a fixed document.";
                tx1.TextAlignment = TextAlignment.Justify;
                tx1.TextWrapping  = TextWrapping.Wrap;
                Grid.SetRow(tx1, 1);
                grd.Children.Add(tx1);

                /**************(2)*********************/
                //Paragraph
                tx2               = new TextBlock();
                tx2.Width         = width;
                tx2.FontSize      = 14;
                tx2.Text          = "Page " + i + " And add the page to the document, this is a little tricky because we need to use a PageContent object as an intermediary and it looks like there is no way to add the page to the page content, the trick is to use the IAddChild interface – according to the documentation you’re not supposed to use IAddChild directly but it’s the only way to build a fixed document.";
                tx2.TextAlignment = TextAlignment.Justify;
                tx2.TextWrapping  = TextWrapping.Wrap;
                Grid.SetRow(tx2, 1);
                grd1.Children.Add(tx2);



                page.Children.Add(grd);
                //Add text to pagecontent
                page1.Children.Add(grd1);

                CloneObject c1 = new CloneObject();
                pageCollection[i] = (FixedPage)c1.DeepCopy();

                pgCont       = new PageContent();
                pgCont.Child = page;
                fxDoc.Pages.Add(pgCont);
            }

            ticket = new PrintTicket();
            ticket.PageMediaSize   = new PageMediaSize(width, height);
            ticket.PageOrientation = PageOrientation.Portrait;
            //ticket.PagesPerSheet = 2;
            pd.PrintTicket = ticket;
            pd.PrintDocument(fxDoc.DocumentPaginator, "My First Document");


            /*****************Print According to Index************************************/

            pgCont = new PageContent();
            //pgCont= fxDoc.Pages[4];

            page         = new FixedPage();
            page         = pageCollection[3];
            pgCont.Child = page;

            fxDoc = new FixedDocument();
            fxDoc.Pages.Add(pgCont);

            ticket = new PrintTicket();
            ticket.PageMediaSize   = new PageMediaSize(width, height);
            ticket.PageOrientation = PageOrientation.Portrait;
            //ticket.PagesPerSheet = 2;
            pd.PrintTicket = ticket;
            pd.PrintDocument(fxDoc.DocumentPaginator, "My First Document");

            /*****************************Cloning of Object******************************************************/
        }
示例#27
0
 public CloneContext(CloneObject cloneObject)
 {
     _cloneObject = cloneObject;
 }
示例#28
0
 protected CloneTests(bool useEmit)
 {
     Monitor.Enter(_lock);
     CloneObjectEx.UseEmit = useEmit;
     _factory = Cloning.Clone.DefaultCloneObject();
 }
示例#29
0
 public object Clone()
 {
     return(CloneObject.Clone(this));
 }
        //SJF = Shortest Job First
        public void solveSJF()
        {
            CurrentTime = 0;
            Status      = SchedulerStatus.On;

            ProcessesQueue = ProcessesList;
            //Queue Starts with ascending order of processes by Arrival Time.
            ProcessesQueue = ProcessesQueue.OrderBy(c => c.ArrivalTime).ThenBy(c => c.BurstTime).ToList();

            //Load first Process
            while (ProcessesQueue[0].ArrivalTime > CurrentTime)
            {
                KeyTime keyTime = new KeyTime();
                keyTime.CpuOnLoad       = false;
                keyTime.Process         = null;
                keyTime.OngoingProcess  = null;
                keyTime.OutgoingProcess = null;
                keyTime.Timestamp       = CurrentTime;
                ++CurrentTime;
                KeyTimes.Add(keyTime);
            }

            //First process comes at moment zero (special scenario)
            if (CurrentTime == 0 && ProcessesQueue[0].ArrivalTime == 0)
            {
                Process firstProcess = ProcessesQueue[0];
                ProcessesQueue.RemoveAt(0); //Remove selected process from the queue
                KeyTime keyTime = new KeyTime();
                keyTime.CpuOnLoad       = true;
                keyTime.OutgoingProcess = null;
                keyTime.Timestamp       = CurrentTime;

                firstProcess.LastEnterTime = CurrentTime;
                firstProcess.Status        = ProcessStatus.OnCpu;
                keyTime.OngoingProcess     = firstProcess;
                KeyTimes.Add(keyTime);
                ++CurrentTime;
            }

            //Continue processing
            KeyTime currentKeyTime = new KeyTime();
            KeyTime lastKeyTime    = KeyTimes[CurrentTime - 1];

            while (ProcessesQueue.Count > 0 || lastKeyTime.OngoingProcess != null || currentKeyTime.OngoingProcess != null)
            {
                currentKeyTime           = new KeyTime();
                lastKeyTime              = KeyTimes[CurrentTime - 1];
                currentKeyTime.Timestamp = CurrentTime;

                //Last process action on current moment
                var lastOngoingProcessResult = CheckForProcessContinuity(CloneObject.CloneJson(lastKeyTime.OngoingProcess));

                //Process ongoing on the CPU. No replacements actions needed
                if (lastOngoingProcessResult != null && lastOngoingProcessResult.Item2 != null)
                {
                    currentKeyTime.OutgoingProcess = null;
                    currentKeyTime.OngoingProcess  = lastOngoingProcessResult.Item2;
                    currentKeyTime.CpuOnLoad       = true;
                    if (currentKeyTime.OngoingProcess.ResponseTime == 0)
                    {
                        currentKeyTime.OngoingProcess.ResponseTime = CurrentTime;
                    }
                    ++AverageCPUUtilisation;
                }
                else
                {
                    if (lastOngoingProcessResult != null)
                    {
                        currentKeyTime.OutgoingProcess = lastOngoingProcessResult.Item1;
                    }

                    currentKeyTime.OngoingProcess = TryLoadProcessFromQueue();
                    if (currentKeyTime.OngoingProcess != null)
                    {
                        ++AverageCPUUtilisation;
                        if (currentKeyTime.OngoingProcess.ResponseTime == 0)
                        {
                            currentKeyTime.OngoingProcess.ResponseTime = CurrentTime;
                        }
                    }
                }

                KeyTimes.Add(currentKeyTime);
                AverageWaitingProcesses += ProcessesQueue.Count;
                ++CurrentTime;
            }

            Status = SchedulerStatus.Off;
        }