protected void dv_DataBound(object sender, EventArgs e)
        {
            if (dv.CurrentMode == DetailsViewMode.Edit)
            {
                var control = (GRA.SRP.Classes.FileDownloadCtl)dv.FindControl("tc1").FindControl("tp1").FindControl("FileUploadCtl");
                if (control != null)
                {
                    control.ProcessRender();
                }


                var ctl = (DropDownList)dv.FindControl("tc1").FindControl("tp2").FindControl("RegistrationBadgeID"); //this.FindControlRecursive(this, "BranchId");
                var lbl = (Label)dv.FindControl("tc1").FindControl("tp2").FindControl("RegistrationBadgeIDLbl");
                var i   = ctl.Items.FindByValue(lbl.Text);
                if (i != null)
                {
                    ctl.SelectedValue = lbl.Text;
                }

                ctl = (DropDownList)dv.FindControl("tc1").FindControl("tp2").FindControl("ProgramGameID");
                lbl = (Label)dv.FindControl("tc1").FindControl("tp2").FindControl("ProgramGameIDLbl");
                i   = ctl.Items.FindByValue(lbl.Text);
                if (i != null)
                {
                    ctl.SelectedValue = lbl.Text;
                }

                ctl = (DropDownList)dv.FindControl("tc1").FindControl("tp5").FindControl("PreTestID");
                lbl = (Label)dv.FindControl("tc1").FindControl("tp5").FindControl("PreTestIDLbl");
                i   = ctl.Items.FindByValue(lbl.Text);
                if (i != null)
                {
                    ctl.SelectedValue = lbl.Text;
                }

                ctl = (DropDownList)dv.FindControl("tc1").FindControl("tp5").FindControl("PostTestID");
                lbl = (Label)dv.FindControl("tc1").FindControl("tp5").FindControl("PostTestIDLbl");
                i   = ctl.Items.FindByValue(lbl.Text);
                if (i != null)
                {
                    ctl.SelectedValue = lbl.Text;
                }



                int PK = int.Parse(lblPK.Text);
                var ds = ProgramCodes.GetProgramStats(PK);

                lbl      = (Label)dv.FindControl("tc1").FindControl("tp6").FindControl("lblTotalCodes");
                lbl.Text = FormatHelper.ToInt((int)ds.Tables[0].Rows[0]["TotalCodes"]);
                lbl      = (Label)dv.FindControl("tc1").FindControl("tp6").FindControl("lblUsedCodes");
                lbl.Text = FormatHelper.ToInt((int)ds.Tables[0].Rows[0]["UsedCodes"]);
                lbl      = (Label)dv.FindControl("tc1").FindControl("tp6").FindControl("lblRemainingCodes");
                lbl.Text = FormatHelper.ToInt((int)ds.Tables[0].Rows[0]["RemainingCodes"]);
                lbl      = (Label)dv.FindControl("tc1").FindControl("tp6").FindControl("lblLastCode");
                lbl.Text = (string)ds.Tables[0].Rows[0]["LastUsedCode"];
            }
        }
        protected void DvItemCommand(object sender, DetailsViewCommandEventArgs e)
        {
            string returnURL = "~/ControlRoom/Modules/Programs/ProgramList.aspx";

            if (e.CommandName.ToLower() == "back")
            {
                Response.Redirect(returnURL);
            }
            if (e.CommandName.ToLower() == "refresh")
            {
                try
                {
                    odsData.DataBind();
                    dv.DataBind();
                    dv.ChangeMode(DetailsViewMode.Edit);

                    var masterPage = (IControlRoomMaster)Master;
                    if (masterPage != null)
                    {
                        masterPage.PageMessage = SRPResources.RefreshOK;
                    }
                }
                catch (Exception ex)
                {
                    var masterPage = (IControlRoomMaster)Master;
                    masterPage.PageError = String.Format(SRPResources.ApplicationError1, ex.Message);
                }
            }
            if (e.CommandName.ToLower() == "add" || e.CommandName.ToLower() == "addandback")
            {
                try
                {
                    var obj = new DAL.Programs();
                    //obj.GenNotificationFlag = ((CheckBox)((DetailsView)sender).FindControl("TabContainer1").FindControl("TabPanel2").FindControl("GenNotificationFlag")).Checked;

                    obj.AdminName = ((TextBox)((DetailsView)sender).FindControl("AdminName")).Text;
                    obj.Title     = ((TextBox)((DetailsView)sender).FindControl("Title")).Text;
                    obj.TabName   = ((TextBox)((DetailsView)sender).FindControl("TabName")).Text;
                    //obj.POrder = FormatHelper.SafeToInt(((TextBox)((DetailsView)sender).FindControl("POrder")).Text);
                    obj.IsActive  = ((CheckBox)((DetailsView)sender).FindControl("IsActive")).Checked;
                    obj.IsHidden  = ((CheckBox)((DetailsView)sender).FindControl("IsHidden")).Checked;
                    obj.StartDate = FormatHelper.SafeToDateTime(((TextBox)((DetailsView)sender).FindControl("StartDate")).Text);
                    obj.EndDate   = FormatHelper.SafeToDateTime(((TextBox)((DetailsView)sender).FindControl("EndDate")).Text);
                    //obj.MaxAge = FormatHelper.SafeToInt(((TextBox)((DetailsView)sender).FindControl("MaxAge")).Text);
                    //obj.MaxGrade = FormatHelper.SafeToInt(((TextBox)((DetailsView)sender).FindControl("MaxGrade")).Text);
                    obj.LoggingStart     = FormatHelper.SafeToDateTime(((TextBox)((DetailsView)sender).FindControl("LoggingStart")).Text);
                    obj.LoggingEnd       = FormatHelper.SafeToDateTime(((TextBox)((DetailsView)sender).FindControl("LoggingEnd")).Text);
                    obj.CompletionPoints = 0;
                    //obj.ParentalConsentFlag = ((CheckBox)((DetailsView)sender).FindControl("ParentalConsentFlag")).Checked;
                    //obj.ParentalConsentText = ((CKEditor.NET.CKEditorControl)((DetailsView)sender).FindControl("ParentalConsentText")).Text;
                    //obj.PatronReviewFlag = ((CheckBox)((DetailsView)sender).FindControl("PatronReviewFlag")).Checked;
                    //obj.LogoutURL = ((TextBox)((DetailsView)sender).FindControl("LogoutURL")).Text;
                    //obj.ProgramGameID = FormatHelper.SafeToInt(((DropDownList) ((DetailsView) sender).FindControl("ProgramGameID")).SelectedValue);
                    //obj.HTML1 = ((CKEditor.NET.CKEditorControl)((DetailsView)sender).FindControl("HTML1")).Text;
                    //obj.HTML2 = ((CKEditor.NET.CKEditorControl)((DetailsView)sender).FindControl("HTML2")).Text;
                    //obj.HTML3 = ((CKEditor.NET.CKEditorControl)((DetailsView)sender).FindControl("HTML3")).Text;
                    //obj.HTML4 = ((CKEditor.NET.CKEditorControl)((DetailsView)sender).FindControl("HTML4")).Text;
                    //obj.HTML5 = ((CKEditor.NET.CKEditorControl)((DetailsView)sender).FindControl("HTML5")).Text;
                    //obj.HTML6 = ((CKEditor.NET.CKEditorControl)((DetailsView)sender).FindControl("HTML6")).Text;
                    //obj.BannerImage = ((TextBox)((DetailsView)sender).FindControl("BannerImage")).Text;
                    //obj.RegistrationBadgeID = FormatHelper.SafeToInt(((DropDownList) ((DetailsView) sender).FindControl("RegistrationBadgeID")).SelectedValue);

                    obj.AddedDate   = DateTime.Now;
                    obj.AddedUser   = ((SRPUser)Session[SessionData.UserProfile.ToString()]).Username; //"N/A";  // Get from session
                    obj.LastModDate = obj.AddedDate;
                    obj.LastModUser = obj.AddedUser;

                    if (obj.IsValid(BusinessRulesValidationMode.INSERT))
                    {
                        obj.Insert();

                        File.Copy(Server.MapPath("~/css/program/default.css"), Server.MapPath("~/css/program/" + obj.PID.ToString() + ".css"), true);
                        File.Copy(Server.MapPath("~/images/banners/default.png"), Server.MapPath("~/images/banners/" + obj.PID.ToString() + ".png"), true);
                        File.Copy(Server.MapPath("~/resources/program.default.en-US.txt"), Server.MapPath("~/resources/program." + obj.PID.ToString() + ".en-US.txt"), true);
                        //CompileResourceFile(Server.MapPath("~/resources/program." + obj.PID.ToString() + ".en-US.txt"));

                        foreach (ActivityType val in Enum.GetValues(typeof(ActivityType)))
                        {
                            var o = new ProgramGamePointConversion();
                            o.PGID           = obj.PID;
                            o.ActivityTypeId = (int)val;
                            o.ActivityCount  = 1;
                            o.PointCount     = 0;
                            o.AddedDate      = obj.AddedDate;
                            o.AddedUser      = obj.AddedUser;
                            o.LastModDate    = o.AddedDate;
                            o.LastModUser    = o.AddedUser;

                            o.Insert();
                        }

                        if (e.CommandName.ToLower() == "addandback")
                        {
                            Response.Redirect(returnURL);
                        }

                        lblPK.Text = obj.PID.ToString();

                        odsData.DataBind();
                        dv.DataBind();
                        dv.ChangeMode(DetailsViewMode.Edit);

                        var masterPage = (IControlRoomMaster)Master;
                        masterPage.PageMessage = SRPResources.AddedOK;
                    }
                    else
                    {
                        var    masterPage = (IControlRoomMaster)Master;
                        string message    = String.Format(SRPResources.ApplicationError1, "<ul>");
                        foreach (BusinessRulesValidationMessage m in obj.ErrorCodes)
                        {
                            message = string.Format(String.Format("{0}<li>{{0}}</li>", message), m.ErrorMessage);
                        }
                        message = string.Format("{0}</ul>", message);
                        masterPage.PageError = message;
                    }
                }
                catch (Exception ex)
                {
                    var masterPage = (IControlRoomMaster)Master;
                    masterPage.PageError = String.Format(SRPResources.ApplicationError1, ex.Message);
                }
            }
            if (e.CommandName.ToLower() == "save" || e.CommandName.ToLower() == "saveandback")
            {
                try
                {
                    var obj = new DAL.Programs();
                    int pk  = int.Parse(((TextBox)((DetailsView)sender).FindControl("TabContainer1").FindControl("TabPanel1").FindControl("PID")).Text);
                    obj.Fetch(pk);

                    obj.AdminName = ((TextBox)((DetailsView)sender).FindControl("TabContainer1").FindControl("TabPanel1").FindControl("AdminName")).Text;
                    obj.Title     = ((TextBox)((DetailsView)sender).FindControl("TabContainer1").FindControl("TabPanel1").FindControl("Title")).Text;
                    obj.TabName   = ((TextBox)((DetailsView)sender).FindControl("TabContainer1").FindControl("TabPanel1").FindControl("TabName")).Text;
                    //obj.POrder = FormatHelper.SafeToInt(((TextBox)((DetailsView)sender).FindControl("POrder")).Text);
                    obj.IsActive            = ((CheckBox)((DetailsView)sender).FindControl("TabContainer1").FindControl("TabPanel1").FindControl("IsActive")).Checked;
                    obj.IsHidden            = ((CheckBox)((DetailsView)sender).FindControl("TabContainer1").FindControl("TabPanel1").FindControl("IsHidden")).Checked;
                    obj.StartDate           = FormatHelper.SafeToDateTime(((TextBox)((DetailsView)sender).FindControl("TabContainer1").FindControl("TabPanel1").FindControl("StartDate")).Text);
                    obj.EndDate             = FormatHelper.SafeToDateTime(((TextBox)((DetailsView)sender).FindControl("TabContainer1").FindControl("TabPanel1").FindControl("EndDate")).Text);
                    obj.MaxAge              = FormatHelper.SafeToInt(((TextBox)((DetailsView)sender).FindControl("TabContainer1").FindControl("TabPanel1").FindControl("MaxAge")).Text);
                    obj.MaxGrade            = FormatHelper.SafeToInt(((TextBox)((DetailsView)sender).FindControl("TabContainer1").FindControl("TabPanel1").FindControl("MaxGrade")).Text);
                    obj.LoggingStart        = FormatHelper.SafeToDateTime(((TextBox)((DetailsView)sender).FindControl("TabContainer1").FindControl("TabPanel1").FindControl("LoggingStart")).Text);
                    obj.LoggingEnd          = FormatHelper.SafeToDateTime(((TextBox)((DetailsView)sender).FindControl("TabContainer1").FindControl("TabPanel1").FindControl("LoggingEnd")).Text);
                    obj.ParentalConsentFlag = ((CheckBox)((DetailsView)sender).FindControl("TabContainer1").FindControl("TabPanel1").FindControl("ParentalConsentFlag")).Checked;
                    obj.ParentalConsentText = ((CKEditor.NET.CKEditorControl)((DetailsView)sender).FindControl("TabContainer1").FindControl("TabPanel1").FindControl("ParentalConsentText")).Text;
                    obj.PatronReviewFlag    = ((CheckBox)((DetailsView)sender).FindControl("TabContainer1").FindControl("TabPanel1").FindControl("PatronReviewFlag")).Checked;
                    obj.LogoutURL           = ((TextBox)((DetailsView)sender).FindControl("TabContainer1").FindControl("TabPanel1").FindControl("LogoutURL")).Text;

                    obj.CompletionPoints = FormatHelper.SafeToInt(((TextBox)((DetailsView)sender).FindControl("TabContainer1").FindControl("TabPanel2").FindControl("CompletionPoints")).Text);
                    obj.ProgramGameID    = FormatHelper.SafeToInt(((DropDownList)((DetailsView)sender).FindControl("TabContainer1").FindControl("TabPanel2").FindControl("ProgramGameID")).Text);
                    //obj.ProgramGameID = 0;
                    obj.RegistrationBadgeID = FormatHelper.SafeToInt(((DropDownList)((DetailsView)sender).FindControl("TabContainer1").FindControl("TabPanel2").FindControl("RegistrationBadgeID")).Text);
                    //obj.RegistrationBadgeID = 0;
                    obj.HTML1 = ((CKEditor.NET.CKEditorControl)((DetailsView)sender).FindControl("TabContainer1").FindControl("TabPanel2").FindControl("HTML1")).Text;
                    obj.HTML2 = ((CKEditor.NET.CKEditorControl)((DetailsView)sender).FindControl("TabContainer1").FindControl("TabPanel2").FindControl("HTML2")).Text;

                    obj.HTML3 = ((CKEditor.NET.CKEditorControl)((DetailsView)sender).FindControl("TabContainer1").FindControl("TabPanel3").FindControl("HTML3")).Text;
                    obj.HTML4 = ((CKEditor.NET.CKEditorControl)((DetailsView)sender).FindControl("TabContainer1").FindControl("TabPanel3").FindControl("HTML4")).Text;

                    obj.HTML5 = ((CKEditor.NET.CKEditorControl)((DetailsView)sender).FindControl("TabContainer1").FindControl("TabPanel4").FindControl("HTML5")).Text;
                    obj.HTML6 = ((CKEditor.NET.CKEditorControl)((DetailsView)sender).FindControl("TabContainer1").FindControl("TabPanel4").FindControl("HTML6")).Text;

                    obj.BannerImage = "";//((TextBox)((DetailsView)sender).FindControl("BannerImage")).Text;


                    obj.LastModDate = DateTime.Now;
                    obj.LastModUser = ((SRPUser)Session[SessionData.UserProfile.ToString()]).Username;  //"N/A";  // Get from session

                    if (obj.IsValid(BusinessRulesValidationMode.UPDATE))
                    {
                        obj.Update();

                        var rptr = ((Repeater)((DetailsView)sender).FindControl("TabContainer1").FindControl("TabPanel5").FindControl("rptr"));
                        if (rptr != null)
                        {
                            foreach (RepeaterItem item in rptr.Items)
                            {
                                var PGCID = int.Parse(((TextBox)item.FindControl("PGCID")).Text);
                                var ActivityCountTxt = ((TextBox)item.FindControl("ActivityCount")).Text;
                                var PointCountTxt = ((TextBox)item.FindControl("PointCount")).Text;
                                int ActivityCount = 1, PointCount = 0;
                                int.TryParse(ActivityCountTxt, out ActivityCount);
                                int.TryParse(PointCountTxt, out PointCount);

                                var o = ProgramGamePointConversion.FetchObject(PGCID);
                                if (o == null)
                                {
                                    continue;
                                }
                                o.ActivityCount = ActivityCount;
                                o.PointCount    = PointCount;
                                o.LastModDate   = obj.LastModDate;
                                o.LastModUser   = obj.LastModUser;
                                o.Update();
                            }
                        }


                        if (e.CommandName.ToLower() == "saveandback")
                        {
                            Response.Redirect(returnURL);
                        }

                        odsData.DataBind();
                        dv.DataBind();
                        dv.ChangeMode(DetailsViewMode.Edit);

                        var masterPage = (IControlRoomMaster)Master;
                        masterPage.PageMessage = SRPResources.SaveOK;
                    }
                    else
                    {
                        var    masterPage = (IControlRoomMaster)Master;
                        string message    = String.Format(SRPResources.ApplicationError1, "<ul>");
                        foreach (BusinessRulesValidationMessage m in obj.ErrorCodes)
                        {
                            message = string.Format(String.Format("{0}<li>{{0}}</li>", message), m.ErrorMessage);
                        }
                        message = string.Format("{0}</ul>", message);
                        masterPage.PageError = message;
                    }
                }
                catch (Exception ex)
                {
                    var masterPage = (IControlRoomMaster)Master;
                    masterPage.PageError = String.Format(SRPResources.ApplicationError1, ex.Message);
                }
            }
            if (e.CommandName.ToLower() == "gen")
            {
                int PK = int.Parse(lblPK.Text);
                var ds = ProgramCodes.GetProgramStats(PK);

                int TotalCodes = (int)ds.Tables[0].Rows[0]["TotalCodes"];
                var txt        = (TextBox)dv.FindControl("TabContainer1").FindControl("TabPanel6").FindControl("txtGen");
                int addl       = int.Parse(txt.Text);

                ProgramCodes.Generate(TotalCodes + 1, TotalCodes + addl, PK);

                odsData.DataBind();
                dv.DataBind();
                dv.ChangeMode(DetailsViewMode.Edit);

                var masterPage = (IControlRoomMaster)Master;
                masterPage.PageMessage = "Additional codes generated!";
            }
            if (e.CommandName.ToLower() == "exp")
            {
                int PK = int.Parse(lblPK.Text);

                var ds = ProgramCodes.GetExportList(PK);

                string excelFilename = Server.MapPath("~/ProgramRewardCodes.xlsx");
                CreateExcelFile.CreateExcelDocument(ds, excelFilename);

                Response.ContentType = "application/vnd.ms-excel";
                Response.AppendHeader("Content-Disposition", "attachment; filename=ProgramRewardCodes.xlsx");
                EnableViewState = false;
                Response.BinaryWrite(File.ReadAllBytes(excelFilename));
                File.Delete(excelFilename);
                Response.End();


                var masterPage = (IControlRoomMaster)Master;
                masterPage.PageMessage = "Codes Exported!";
            }
        }
        public byte[] ToCurrentFormat()
        {
            //Update if Unit changed
            UpdateCustomUnits();

            var bytes = new List <byte>();

            bytes.AddRange(Signature.ToBytes(2));
            bytes.Add((byte)Version);

            //'for' instead 'foreach' for upgrade support

            for (var i = 0; i < InputPoint.GetCount(FileVersion); ++i)
            {
                var obj = Inputs.ElementAtOrDefault(i) ?? new InputPoint();
                obj.FileVersion = FileVersion;
                bytes.AddRange(obj.ToBytes());
            }

            for (var i = 0; i < OutputPoint.GetCount(FileVersion); ++i)
            {
                var obj = Outputs.ElementAtOrDefault(i) ?? new OutputPoint();
                bytes.AddRange(obj.ToBytes());
            }

            for (var i = 0; i < VariablePoint.GetCount(FileVersion); ++i)
            {
                var obj = Variables.ElementAtOrDefault(i) ?? new VariablePoint();
                bytes.AddRange(obj.ToBytes());
            }

            for (var i = 0; i < ProgramPoint.GetCount(FileVersion); ++i)
            {
                var obj = Programs.ElementAtOrDefault(i) ?? new ProgramPoint();
                bytes.AddRange(obj.ToBytes());
            }

            for (var i = 0; i < ControllerPoint.GetCount(FileVersion); ++i)
            {
                var obj = Controllers.ElementAtOrDefault(i) ?? new ControllerPoint();
                bytes.AddRange(obj.ToBytes());
            }

            for (var i = 0; i < ScreenPoint.GetCount(FileVersion); ++i)
            {
                var obj = Screens.ElementAtOrDefault(i) ?? new ScreenPoint();
                bytes.AddRange(obj.ToBytes());
            }

            for (var i = 0; i < GraphicPoint.GetCount(FileVersion); ++i)
            {
                var obj = Graphics.ElementAtOrDefault(i) ?? new GraphicPoint();
                bytes.AddRange(obj.ToBytes());
            }

            for (var i = 0; i < UserPoint.GetCount(FileVersion); ++i)
            {
                var obj = Users.ElementAtOrDefault(i) ?? new UserPoint();
                bytes.AddRange(obj.ToBytes());
            }

            for (var i = 0; i < CustomDigitalUnitsPoint.GetCount(FileVersion); ++i)
            {
                var obj = CustomUnits.Digital.ElementAtOrDefault(i) ?? new CustomDigitalUnitsPoint();
                bytes.AddRange(obj.ToBytes());
            }

            for (var i = 0; i < TablePoint.GetCount(FileVersion); ++i)
            {
                var obj = Tables.ElementAtOrDefault(i) ?? new TablePoint();
                bytes.AddRange(obj.ToBytes());
            }

            {
                var settings = Settings ?? new Settings(FileVersion);
                bytes.AddRange(settings.ToBytes());
            }

            for (var i = 0; i < SchedulePoint.GetCount(FileVersion); ++i)
            {
                var obj = Schedules.ElementAtOrDefault(i) ?? new SchedulePoint();
                bytes.AddRange(obj.ToBytes());
            }

            for (var i = 0; i < HolidayPoint.GetCount(FileVersion); ++i)
            {
                var obj = Holidays.ElementAtOrDefault(i) ?? new HolidayPoint();
                bytes.AddRange(obj.ToBytes());
            }

            for (var i = 0; i < MonitorPoint.GetCount(FileVersion); ++i)
            {
                var obj = Monitors.ElementAtOrDefault(i) ?? new MonitorPoint();
                bytes.AddRange(obj.ToBytes());
            }

            for (var i = 0; i < ScheduleCode.GetCount(FileVersion); ++i)
            {
                var obj = ScheduleCodes.ElementAtOrDefault(i) ?? new ScheduleCode();
                bytes.AddRange(obj.ToBytes());
            }

            for (var i = 0; i < HolidayCode.GetCount(FileVersion); ++i)
            {
                var obj = HolidayCodes.ElementAtOrDefault(i) ?? new HolidayCode();
                bytes.AddRange(obj.ToBytes());
            }

            for (var i = 0; i < ProgramCode.GetCount(FileVersion); ++i)
            {
                var obj = ProgramCodes.ElementAtOrDefault(i) ?? new ProgramCode();
                bytes.AddRange(obj.ToBytes());
            }

            for (var i = 0; i < CustomAnalogUnitsPoint.GetCount(FileVersion); ++i)
            {
                var obj = CustomUnits.Analog.ElementAtOrDefault(i) ?? new CustomAnalogUnitsPoint();
                bytes.AddRange(obj.ToBytes());
            }

            if (!IsUpgraded)
            {
                CheckSize(bytes.Count, Length);
            }

            return(bytes.ToArray());
        }
        private void FromCurrentFormat(byte[] bytes, int offset = 0)
        {
            Signature = bytes.GetString(0, 2);
            Version   = bytes.ToByte(2);
            Length    = bytes.Length;

            offset += 3;
            int parts = 1;

            this.parentClass?.PassMessage(parts, $"PRG Header 1 - Offset {offset}");


            //Get all inputs
            Inputs.AddRange(GetArray(bytes,
                                     InputPoint.GetCount(FileVersion),
                                     InputPoint.GetSize(FileVersion), ref offset)
                            .Select(i => new InputPoint(i, 0, FileVersion)));

            parts += Inputs.Count;
            this.parentClass?.PassMessage(parts, $"InputPoints {Inputs.Count} - Offset {offset}");


            //Get all outputs
            Outputs.AddRange(GetArray(bytes,
                                      OutputPoint.GetCount(FileVersion),
                                      OutputPoint.GetSize(FileVersion), ref offset)
                             .Select(i => new OutputPoint(i, 0, FileVersion)));

            parts += Outputs.Count;
            this.parentClass?.PassMessage(parts, $"OutputPoints {Outputs.Count} - Offset {offset}");


            //Get all variables
            Variables.AddRange(GetArray(bytes,
                                        VariablePoint.GetCount(FileVersion),
                                        VariablePoint.GetSize(FileVersion), ref offset)
                               .Select(i => new VariablePoint(i, 0, FileVersion)));
            parts += Variables.Count;
            this.parentClass?.PassMessage(parts, $"VariablePoints {Variables.Count} - Offset {offset}");

            //Get all programs
            Programs.AddRange(GetArray(bytes,
                                       ProgramPoint.GetCount(FileVersion),
                                       ProgramPoint.GetSize(FileVersion), ref offset)
                              .Select(i => new ProgramPoint(i, 0, FileVersion)));

            parts += Programs.Count;
            this.parentClass?.PassMessage(parts, $"ProgramPoints {Programs.Count} - Offset {offset}");

            //Get all controllers
            Controllers.AddRange(GetArray(bytes,
                                          ControllerPoint.GetCount(FileVersion),
                                          ControllerPoint.GetSize(FileVersion), ref offset)
                                 .Select(i => new ControllerPoint(i, 0, FileVersion)));

            parts += Controllers.Count;
            this.parentClass?.PassMessage(parts, $"ControllerPoints {Controllers.Count} - Offset {offset}");

            //Get all screens
            Screens.AddRange(GetArray(bytes,
                                      ScreenPoint.GetCount(FileVersion),
                                      ScreenPoint.GetSize(FileVersion), ref offset)
                             .Select(i => new ScreenPoint(i, 0, FileVersion)));

            parts += Screens.Count;
            this.parentClass?.PassMessage(parts, $"ScreenPoints {Screens.Count} - Offset {offset}");

            //Get all graphics

            //TODO: NOT MINE: Constants to object static Size(FileVersion) Count(FileVersion)

            Graphics.AddRange(GetArray(bytes,
                                       GraphicPoint.GetCount(FileVersion),
                                       GraphicPoint.GetSize(FileVersion), ref offset)
                              .Select(i => new GraphicPoint(i, 0, FileVersion)));

            parts += Graphics.Count;
            this.parentClass?.PassMessage(parts, $"GraphicPoints {Graphics.Count} - Offset {offset}");

            Users.AddRange(GetArray(bytes,
                                    UserPoint.GetCount(FileVersion),
                                    UserPoint.GetSize(FileVersion), ref offset)
                           .Select(i => new UserPoint(i, 0, FileVersion)));

            parts += Users.Count;
            this.parentClass?.PassMessage(parts, $"UserPoints {Users.Count} - Offset {offset}");

            CustomUnits.Digital.AddRange(GetArray(bytes,
                                                  CustomDigitalUnitsPoint.GetCount(FileVersion),
                                                  CustomDigitalUnitsPoint.GetSize(FileVersion), ref offset)
                                         .Select(i => new CustomDigitalUnitsPoint(i, 0, FileVersion)));

            parts += CustomUnits.Digital.Count;
            this.parentClass?.PassMessage(parts, $"CustomUnits.DigitalPoints {CustomUnits.Digital.Count} - Offset {offset}");

            Tables.AddRange(GetArray(bytes,
                                     TablePoint.GetCount(FileVersion),
                                     TablePoint.GetSize(FileVersion), ref offset)
                            .Select(i => new TablePoint(i, 0, FileVersion)));

            parts += Tables.Count;
            this.parentClass?.PassMessage(parts, $"TablePoints {Tables.Count} - Offset {offset}");

            Settings = new Settings(
                GetObject(bytes, Settings.GetSize(FileVersion), ref offset), 0, FileVersion);

            parts += 1;
            this.parentClass?.PassMessage(parts, $"Settings 1 - Offset {offset}");

            Schedules.AddRange(GetArray(bytes,
                                        SchedulePoint.GetCount(FileVersion),
                                        SchedulePoint.GetSize(FileVersion), ref offset)
                               .Select(i => new SchedulePoint(i, 0, FileVersion)));

            parts += Schedules.Count;
            this.parentClass?.PassMessage(parts, $"SchedulePoints {Schedules.Count} - Offset {offset}");

            Holidays.AddRange(GetArray(bytes,
                                       HolidayPoint.GetCount(FileVersion),
                                       HolidayPoint.GetSize(FileVersion), ref offset)
                              .Select(i => new HolidayPoint(i, 0, FileVersion)));

            parts += Holidays.Count;
            this.parentClass?.PassMessage(parts, $"HolidayPoints {Holidays.Count} - Offset {offset}");

            Monitors.AddRange(GetArray(bytes,
                                       MonitorPoint.GetCount(FileVersion),
                                       MonitorPoint.GetSize(FileVersion), ref offset)
                              .Select(i => new MonitorPoint(i, 0, FileVersion)));

            parts += Monitors.Count;
            this.parentClass?.PassMessage(parts, $"MonitorPoints {Monitors.Count} - Offset {offset}");

            ScheduleCodes.AddRange(GetArray(bytes,
                                            ScheduleCode.GetCount(FileVersion),
                                            ScheduleCode.GetSize(FileVersion), ref offset)
                                   .Select(i => new ScheduleCode(i, 0, FileVersion)));

            parts += ScheduleCodes.Count;
            this.parentClass?.PassMessage(parts, $"ScheduleCodes {ScheduleCodes.Count} - Offset {offset}");

            HolidayCodes.AddRange(GetArray(bytes,
                                           HolidayCode.GetCount(FileVersion),
                                           HolidayCode.GetSize(FileVersion), ref offset)
                                  .Select(i => new HolidayCode(i, 0, FileVersion)));

            parts += HolidayCodes.Count;
            this.parentClass?.PassMessage(parts, $"HolidayCodes {HolidayCodes.Count} - Offset {offset}");


            int pcode_offset     = offset;
            var ProgramCodeBytes = bytes.ToBytes(offset, ProgramCode.GetSize(FileVersion));

            ProgramCodes.AddRange(GetArray(bytes,
                                           ProgramCode.GetCount(FileVersion),
                                           ProgramCode.GetSize(FileVersion), ref offset)
                                  //.Select(i => new ProgramCode(i, this, 0, FileVersion)));
                                  .Select(i => new ProgramCode()));

            ProgramCodes[0] = new ProgramCode(ProgramCodeBytes, this, 0, FileVersion);

            parts += 1;
            this.parentClass?.PassMessage(parts, $"ProgramCodes 1 - Offset {pcode_offset+2000}");


            for (int i = 1; i < ProgramCode.GetCount(FileVersion); i++)
            {
                pcode_offset    += ProgramCode.GetSize(FileVersion);
                ProgramCodeBytes = bytes.ToBytes(pcode_offset, ProgramCode.GetSize(FileVersion));
                ProgramCodes[i]  = new ProgramCode(ProgramCodeBytes, this, 0, FileVersion);

                parts += 1;
                this.parentClass?.PassMessage(parts, $"ProgramCodes {i+1} - Offset {pcode_offset+2000}");

                //Debug.WriteLine($"Leído ProgramCode[{i}]");
            }



            CustomUnits.Analog.AddRange(GetArray(bytes,
                                                 CustomAnalogUnitsPoint.GetCount(FileVersion),
                                                 CustomAnalogUnitsPoint.GetSize(FileVersion), ref offset)
                                        .Select(i => new CustomAnalogUnitsPoint(i, 0, FileVersion)));

            parts += CustomUnits.Analog.Count;
            this.parentClass?.PassMessage(parts, $"CustomUnits.AnalogPoints {CustomUnits.Analog.Count} - Offset {offset}");

            CheckOffset(offset, Length);

            UpdateCustomUnits();
        }
Exemple #5
0
        private void FromCurrentFormat(byte[] bytes, int offset = 0)
        {
            Signature = bytes.GetString(0, 2);
            Version   = bytes.ToByte(2);
            Length    = bytes.Length;

            offset += 3;

            //Get all inputs
            Inputs.AddRange(GetArray(bytes,
                                     InputPoint.GetCount(FileVersion),
                                     InputPoint.GetSize(FileVersion), ref offset)
                            .Select(i => new InputPoint(i, 0, FileVersion)));

            //Get all outputs
            Outputs.AddRange(GetArray(bytes,
                                      OutputPoint.GetCount(FileVersion),
                                      OutputPoint.GetSize(FileVersion), ref offset)
                             .Select(i => new OutputPoint(i, 0, FileVersion)));

            //Get all variables
            Variables.AddRange(GetArray(bytes,
                                        VariablePoint.GetCount(FileVersion),
                                        VariablePoint.GetSize(FileVersion), ref offset)
                               .Select(i => new VariablePoint(i, 0, FileVersion)));

            //Get all programs
            Programs.AddRange(GetArray(bytes,
                                       ProgramPoint.GetCount(FileVersion),
                                       ProgramPoint.GetSize(FileVersion), ref offset)
                              .Select(i => new ProgramPoint(i, 0, FileVersion)));

            //Get all controllers
            Controllers.AddRange(GetArray(bytes,
                                          ControllerPoint.GetCount(FileVersion),
                                          ControllerPoint.GetSize(FileVersion), ref offset)
                                 .Select(i => new ControllerPoint(i, 0, FileVersion)));

            //Get all screens
            Screens.AddRange(GetArray(bytes,
                                      ScreenPoint.GetCount(FileVersion),
                                      ScreenPoint.GetSize(FileVersion), ref offset)
                             .Select(i => new ScreenPoint(i, 0, FileVersion)));

            //Get all graphics

            //TODO: Constants to object static Size(FileVersion) Count(FileVersion)

            Graphics.AddRange(GetArray(bytes,
                                       GraphicPoint.GetCount(FileVersion),
                                       GraphicPoint.GetSize(FileVersion), ref offset)
                              .Select(i => new GraphicPoint(i, 0, FileVersion)));

            Users.AddRange(GetArray(bytes,
                                    UserPoint.GetCount(FileVersion),
                                    UserPoint.GetSize(FileVersion), ref offset)
                           .Select(i => new UserPoint(i, 0, FileVersion)));

            CustomUnits.Digital.AddRange(GetArray(bytes,
                                                  CustomDigitalUnitsPoint.GetCount(FileVersion),
                                                  CustomDigitalUnitsPoint.GetSize(FileVersion), ref offset)
                                         .Select(i => new CustomDigitalUnitsPoint(i, 0, FileVersion)));

            Tables.AddRange(GetArray(bytes,
                                     TablePoint.GetCount(FileVersion),
                                     TablePoint.GetSize(FileVersion), ref offset)
                            .Select(i => new TablePoint(i, 0, FileVersion)));

            Settings = new Settings(
                GetObject(bytes, Settings.GetSize(FileVersion), ref offset), 0, FileVersion);

            Schedules.AddRange(GetArray(bytes,
                                        SchedulePoint.GetCount(FileVersion),
                                        SchedulePoint.GetSize(FileVersion), ref offset)
                               .Select(i => new SchedulePoint(i, 0, FileVersion)));

            Holidays.AddRange(GetArray(bytes,
                                       HolidayPoint.GetCount(FileVersion),
                                       HolidayPoint.GetSize(FileVersion), ref offset)
                              .Select(i => new HolidayPoint(i, 0, FileVersion)));

            Monitors.AddRange(GetArray(bytes,
                                       MonitorPoint.GetCount(FileVersion),
                                       MonitorPoint.GetSize(FileVersion), ref offset)
                              .Select(i => new MonitorPoint(i, 0, FileVersion)));

            ScheduleCodes.AddRange(GetArray(bytes,
                                            ScheduleCode.GetCount(FileVersion),
                                            ScheduleCode.GetSize(FileVersion), ref offset)
                                   .Select(i => new ScheduleCode(i, 0, FileVersion)));

            HolidayCodes.AddRange(GetArray(bytes,
                                           HolidayCode.GetCount(FileVersion),
                                           HolidayCode.GetSize(FileVersion), ref offset)
                                  .Select(i => new HolidayCode(i, 0, FileVersion)));


            int pcode_offset     = offset;
            var ProgramCodeBytes = bytes.ToBytes(offset, ProgramCode.GetSize(FileVersion));

            ProgramCodes.AddRange(GetArray(bytes,
                                           ProgramCode.GetCount(FileVersion),
                                           ProgramCode.GetSize(FileVersion), ref offset)
                                  //.Select(i => new ProgramCode(i, this, 0, FileVersion)));
                                  .Select(i => new ProgramCode()));

            ProgramCodes[0] = new ProgramCode(ProgramCodeBytes, this, 0, FileVersion);


            for (int i = 1; i < ProgramCode.GetCount(FileVersion); i++)
            {
                pcode_offset    += ProgramCode.GetSize(FileVersion);
                ProgramCodeBytes = bytes.ToBytes(pcode_offset, ProgramCode.GetSize(FileVersion));
                ProgramCodes[i]  = new ProgramCode(ProgramCodeBytes, this, 0, FileVersion);
                Debug.WriteLine($"Leído ProgramCode[{i}]");
            }



            CustomUnits.Analog.AddRange(GetArray(bytes,
                                                 CustomAnalogUnitsPoint.GetCount(FileVersion),
                                                 CustomAnalogUnitsPoint.GetSize(FileVersion), ref offset)
                                        .Select(i => new CustomAnalogUnitsPoint(i, 0, FileVersion)));

            CheckOffset(offset, Length);

            UpdateCustomUnits();
        }
        public static bool AwardBadgeToPatron(int badgeToAward, Patron patron, ref List <Badge> earnedBadges)
        {
            var now = DateTime.Now;

            // check if badge was already earned...
            var pbds = PatronBadges.GetAll(patron.PID);
            var a    = pbds.Tables[0].AsEnumerable().Where(r => r.Field <int>("BadgeID") == badgeToAward);

            var newTable = new DataTable();

            try { newTable = a.CopyToDataTable(); } catch { }

            // badge not found, award it!
            if (newTable.Rows.Count == 0)
            {
                var pb = new PatronBadges {
                    BadgeID = badgeToAward, DateEarned = now, PID = patron.PID
                };
                pb.Insert();

                var earnedBadge = Badge.GetBadge(badgeToAward);
                if (earnedBadge != null)
                {
                    earnedBadges.Add(earnedBadge);

                    //if badge generates notification, then generate the notification
                    if (earnedBadge.GenNotificationFlag)
                    {
                        var not = new Notifications {
                            PID_To      = patron.PID,
                            PID_From    = 0, //0 == System Notification
                            Subject     = earnedBadge.NotificationSubject,
                            Body        = earnedBadge.NotificationBody,
                            isQuestion  = false,
                            AddedDate   = now,
                            LastModDate = now,
                            AddedUser   = patron.Username,
                            LastModUser = "******"
                        };
                        not.Insert();
                    }

                    //if badge generates prize, then generate the prize
                    if (earnedBadge.IncludesPhysicalPrizeFlag)
                    {
                        var ppp = new DAL.PatronPrizes {
                            PID          = patron.PID,
                            PrizeSource  = 1,
                            BadgeID      = badgeToAward,
                            PrizeName    = earnedBadge.PhysicalPrizeName,
                            RedeemedFlag = false,
                            AddedUser    = patron.Username,
                            LastModUser  = "******",
                            AddedDate    = now,
                            LastModDate  = now
                        };

                        ppp.Insert();
                    }



                    // if badge generates award code, then generate the code
                    if (earnedBadge.AssignProgramPrizeCode)
                    {
                        var rewardCode = string.Empty;
                        // get the Code value
                        // save the code value for the patron
                        rewardCode = ProgramCodes.AssignCodeForPatron(patron.ProgID, patron.ProgID);

                        // generate the notification
                        var not = new Notifications {
                            PID_To      = patron.PID,
                            PID_From    = 0, //0 == System Notification
                            Subject     = earnedBadge.PCNotificationSubject,
                            Body        = earnedBadge.PCNotificationBody.Replace("{ProgramRewardCode}", rewardCode),
                            isQuestion  = false,
                            AddedDate   = now,
                            LastModDate = now,
                            AddedUser   = patron.Username,
                            LastModUser = "******"
                        };
                        not.Insert();
                    }
                }


                return(true);
            }
            else
            {
                return(false);
            }
        }