protected void Page_Load(object sender, EventArgs e) { #region Check Login CheckSchoolAdminSession(); #endregion Check Login var view = new ScripSafe(); string viewTID = CCLib.Common.Strings.GetQueryString("viewTID"); string viewSID = CCLib.Common.DataAccess.GetValue(@"SELECT t.StudentNumber FROM Transcript_Transcripts t WHERE t.SchoolID=" + AdminInfo["SchoolID"] + " and t.TranscriptID=" + viewTID).ToString(); string pdfPath = view.ViewTranscriptRequest(AdminInfo["SchoolID"].ToString(), viewSID, viewTID); string strName = "\"attachment; filename=\"Transcript_" + viewSID + ".pdf\""; Response.Clear(); Response.AddHeader("content-disposition", strName); Response.Charset = ""; Response.ContentType = "application/pdf"; //Response.Write(CareerCruisingWeb.CCLib.Common.Forms.JavaScriptNotify(pdfPath)); var bytes = File.ReadAllBytes(pdfPath); File.Delete(pdfPath); Response.BinaryWrite(bytes); Response.End(); }
protected void Page_Load(object sender, EventArgs e) { #region Check Login CheckSchoolAdminSession(); #endregion Check Login if (Request.ServerVariables["REQUEST_METHOD"] == "POST") { string strStudentID = CCLib.Common.Strings.GetFormString("hidStudentID"); string strTID = CCLib.Common.Strings.GetFormString("hidTID"); string strOffice = CCLib.Common.Strings.GetFormString("hidOffice"); string strEmail = CCLib.Common.Strings.GetFormString("hidEmail"); string strRID = CCLib.Common.Strings.GetFormString("hidRID"); string strSchool = CCLib.Common.Strings.GetFormString("hidSchool"); if (hidDelType.Value == "3") { CCLib.Common.DataAccess.ExecuteDb("UPDATE Transcript_Requests SET Confirmed=1, IsMailed=1, StatusId=3 where RequestID=" + strRID); Response.Write(CCLib.Common.Forms.JavaScriptNotify("The transcript request has been successfully updated.")); } else { var ser = new ScripSafe(); string strMessage = ser.ConfirmTranscriptRequest(strRID, AdminInfo["SchoolID"].ToString(), strStudentID, strTID, strOffice, strSchool, strEmail); if (strMessage == "Confirmation Request Recieved") { // Change the status CCLib.Common.DataAccess.ExecuteDb("UPDATE Transcript_Requests SET Confirmed=1, StatusId=2, DateSent=GetDate() where RequestID=" + strRID); } Response.Write(CCLib.Common.Forms.JavaScriptNotify("In response to the request, Scrip-Safe said: " + strMessage)); } } string strTranscript = CCLib.Common.Strings.GetQueryString("RID"); var sql = new System.Text.StringBuilder(); sql.Append(@"SELECT r.RequestId, p.FirstName + ' ' + p.LastName AS 'FullName', u.NAME, t.DateReceived, r.DateRequested, r.StatusID, sl.Descr" + SuffixCode() + @" as StatusDescr, trt.Descr" + SuffixCode() + @" as ReceiverDescription, tir.Description as OfficeDescr, tir.ID, r.DateSent, r.DateRead, r.InstitutionOther, r.RequestType, r.RecipientEmail, r.InNetworkReceiverOffice, p.StudentID, t.TranscriptID FROM dbo.Transcript_Requests r JOIN dbo.Portfolio p ON r.PortfolioID = p.PortfolioID LEFT OUTER JOIN dbo.UX_INST u ON r.InstitutionID=u.INUN_ID LEFT OUTER JOIN dbo.Transcript_Transcripts t ON r.PortfolioID=t.PortfolioID JOIN dbo.Transcript_Status_Lookup sl ON r.StatusID=sl.StatusID LEFT OUTER JOIN Transcript_InNetworkRecipients tir on r.InstitutionID=tir.CareerCruisingID LEFT OUTER JOIN Transcript_ReceipientType_Lookup trt on tir.RecipientTypeID=trt.RecipientTypeID WHERE r.RequestId=" + strTranscript); dtDetails = CCLib.Common.DataAccess.GetDataTable(sql.ToString()); hidRID.Value = dtDetails.Rows[0]["RequestId"].ToString(); hidOffice.Value = dtDetails.Rows[0]["InNetworkReceiverOffice"].ToString(); hidStudentID.Value = dtDetails.Rows[0]["StudentID"].ToString(); hidTID.Value = dtDetails.Rows[0]["TranscriptID"].ToString(); hidEmail.Value = dtDetails.Rows[0]["RecipientEmail"].ToString(); hidSchool.Value = (dtDetails.Rows[0]["NAME"] != DBNull.Value) ? dtDetails.Rows[0]["NAME"].ToString() : dtDetails.Rows[0]["InstitutionOther"].ToString(); hidDelType.Value = CCLib.Common.Strings.GetQueryString("DEL"); switch (dtDetails.Rows[0]["RequestType"].ToString()) { case "1": lblReceiver.Text = "In-network College"; break; case "2": if (dtDetails.Rows[0]["RecipientEmail"] != DBNull.Value) lblReceiver.Text = "Out-of-Network:" + dtDetails.Rows[0]["RecipientEmail"].ToString(); else lblReceiver.Text = "Out-of-Network: Email Delivery"; break; case "3": lblReceiver.Text = "Mail"; break; } litDateSent.Text = "<a href='javascript:sendRequest();'>Send Now</a>"; #region Properties For The School Base Class TitleBar = "Transcript Requests"; SubTitleBar = "Transcript Request Confirmation"; #endregion Properties For The School Base Class }
protected void Page_Load(object sender, EventArgs e) { #region Check Login CheckSchoolAdminSession(); #endregion Check Login // Unmapped transcripts var sql = new System.Text.StringBuilder(); if (Request.ServerVariables["REQUEST_METHOD"] == "POST") { string strFormType = CCLib.Common.Strings.GetFormString("formType"); switch (strFormType) { case "1": string strTID = CCLib.Common.Strings.GetFormString("delTID"); string strSID = CCLib.Common.DataAccess.GetValue(@"SELECT p.StudentID FROM dbo.Portfolio p JOIN dbo.Transcript_Transcripts t ON p.PortfolioID = t.PortfolioID WHERE t.TranscriptID=" + strTID).ToString(); var safe = new ScripSafe(); string del = safe.DeleteTranscriptRequest(AdminInfo["SchoolID"].ToString(),strSID,strTID); if (del == "Confirmation Request Recieved") { sql.Clear(); sql.Append("DELETE from Transcript_Transcripts where TranscriptID=" + strTID); CCLib.Common.DataAccess.ExecuteDb(sql.ToString()); Response.Write(CCLib.Common.Forms.JavaScriptNotify("The transcript has been deleted.")); } else { Response.Write(CCLib.Common.Forms.JavaScriptNotify("The transcript could not be deleted at this time. Please try again later.")); } break; case "2": sql.Clear(); for (int c = 0; c < Request.Form.Count; c++) { if (Request.Form.Keys[c].Contains("confirm")) { string transcriptID = Request.Form.Keys[c].Replace("confirm", ""); sql.Append(";Update Transcript_Transcripts set DateLinkApproved=GetDate(), AdminID=" + AdminInfo["AdminID"] + " where TranscriptID=" + transcriptID); } } sql.Remove(0, 1); CCLib.Common.DataAccess.ExecuteDb(sql.ToString()); Response.Write(CCLib.Common.Forms.JavaScriptNotify("The transcript information has been updated.")); break; } } string strType = (CCLib.Common.Strings.GetQueryString("T").Length > 0) ? CCLib.Common.Strings.GetQueryString("T") : "1"; switch (strType) { case "1": sql.Append("SELECT TranscriptID, StudentName, DateOfBirth, StudentNumber, DateReceived FROM dbo.Transcript_Transcripts "); sql.AppendFormat(" WHERE PortfolioID is null and SchoolID={0} AND (DateLinkApproved IS NULL or DateLinkApproved = '')", AdminInfo["SchoolID"].ToString()); pnlAll.Visible = false; pnlConfirm.Visible = false; pnlUnmapped.Visible = true; break; case "2": sql.Append("SELECT TranscriptID, StudentName, StudentNumber, DateReceived, p.FirstName + ' ' + p.LastName AS 'ccName', p.StudentID as 'CCID', "); sql.Append("t.DateOfBirth FROM dbo.Transcript_Transcripts t JOIN dbo.Portfolio p ON t.PortfolioID = p.PortfolioID "); sql.AppendFormat(" WHERE t.SchoolID={0} AND (DateLinkApproved IS NULL or DateLinkApproved = '')", AdminInfo["SchoolID"].ToString()); pnlAll.Visible = false; pnlConfirm.Visible = true; pnlUnmapped.Visible = false; break; case "3": sql.Append("SELECT TranscriptID, StudentName, StudentNumber, DateReceived, p.FirstName + ' ' + p.LastName AS 'ccName', t.PortfolioID as 'CCID' "); sql.Append(" FROM dbo.Transcript_Transcripts t JOIN dbo.Portfolio p ON t.PortfolioID = p.PortfolioID "); sql.AppendFormat(" WHERE t.SchoolID={0} AND DateLinkApproved is not null", AdminInfo["SchoolID"].ToString()); pnlAll.Visible = true; pnlConfirm.Visible = false; pnlUnmapped.Visible = false; break; } string strHeaderSQL = @"SELECT (SELECT COUNT(TranscriptID) FROM dbo.Transcript_Transcripts WHERE PortfolioID IS NULL AND SchoolID=" + AdminInfo["SchoolID"] + @") AS 'Unmapped', (SELECT COUNT(TranscriptID) FROM dbo.Transcript_Transcripts WHERE PortfolioID IS NOT NULL AND Schoolid=" + AdminInfo["SchoolID"] + @" AND AdminID IS NULL AND IsAutoLink=1) AS 'Mapped', (SELECT COUNT(TranscriptID) FROM dbo.Transcript_Transcripts WHERE PortfolioID IS NOT NULL AND Schoolid="+ AdminInfo["SchoolID"] + @" AND AdminID IS NOT NULL AND DateLinkApproved IS NOT NULL) AS 'Confirmed'"; dtHeader = CCLib.Common.DataAccess.GetDataTable(strHeaderSQL); dtTranscripts = CCLib.Common.DataAccess.GetDataTable(sql.ToString()); #region Properties For The School Base Class TitleBar = "Application Planner"; SubTitleBar = "Transcript List"; #endregion Properties For The School Base Class }
protected void Page_Load(object sender, EventArgs e) { #region Check Login CheckSchoolAdminSession(); #endregion Check Login if (Request.ServerVariables["REQUEST_METHOD"] == "POST" && CCLib.Common.Strings.GetFormString("type") == "3") { Response.Clear(); string strSchool = CCLib.Common.Strings.GetFormString("name"); string strResponse = ""; DataTable dtSchools = CCLib.Common.DataAccess.GetDataTable("SELECT INUN_ID, [NAME] + ' - ' + CITY AS 'NAME' FROM dbo.UX_INST WHERE STATE_CODE='" + strSchool + "' ORDER BY [NAME]"); for (int c = 0; c < dtSchools.Rows.Count; c++) strResponse += dtSchools.Rows[c]["INUN_ID"] + "#" + dtSchools.Rows[c]["NAME"] + "|"; Response.Write(strResponse); Response.End(); } else if (Request.ServerVariables["REQUEST_METHOD"] == "POST" && CCLib.Common.Strings.GetFormString("type") == "4") { Response.Clear(); string strSchool = CCLib.Common.Strings.GetFormString("name"); string strResponse = ""; DataTable dtSchools = CCLib.Common.DataAccess.GetDataTable("SELECT ScripSafeID, [Description] FROM dbo.Transcript_InNetworkRecipients WHERE CareerCruisingID=" + strSchool + " ORDER BY [Description]"); if (dtSchools.Rows.Count > 0) { for (int c = 0; c < dtSchools.Rows.Count; c++) strResponse += dtSchools.Rows[c]["ScripSafeID"] + "#" + dtSchools.Rows[c]["Description"] + "|"; } else strResponse = "0"; Response.Write(strResponse); Response.End(); } else if (Request.ServerVariables["REQUEST_METHOD"] == "POST" && CCLib.Common.Strings.GetFormString("type") == "1") { string sql = ""; string destination = CCLib.Common.Strings.GetFormString("destination"); string strDel = ""; string strOutEmail = CCLib.Common.Strings.GetFormString("oEmail"); string strMail = CCLib.Common.Strings.GetFormString("cbMail"); string strSchool = CCLib.Common.Strings.GetFormString("selSchool"); string strPID = pid.Value; string strPrintDate = printdate.Value; int intRequestId = 0; string strDestEmail = ""; string strDestSchool = ""; string strDestOffice = ""; if (strMail != "") { // Then it's an out of network request that was mailed sql = "INSERT Transcript_Requests (PortfolioID, RecipientTypeID, InstitutionID, DateRequested, StatusID, RequestType, DatePrinted) VALUES (" + strPID + ",1," + strSchool + ",GetDate(),6,3,'" + strPrintDate + "')"; strDel = "3"; intRequestId = CCLib.Common.DataAccess.ExecuteDbWithIntResult(sql + ";select @@identity"); Response.Redirect("TranscriptRequestList.aspx?T=1&S=1"); } else { if (strOutEmail != "") { // Then it's an out of network request to be emailed sql = "INSERT Transcript_Requests (PortfolioID, RecipientTypeID, DateRequested, InstitutionID, RecipientEmail, StatusID, RequestType, DatePrinted) VALUES (" + strPID + ",1,GetDate(),"; sql += strSchool + ",'" + strOutEmail + "',1,2,'" + strPrintDate + "')"; strDel = "2"; strDestSchool = strSchool; strDestEmail = strOutEmail; } else { // Create new transcript request switch (destination) { case "ncaa": sql = "INSERT Transcript_Requests (PortfolioID, RecipientTypeID, DateRequested, StatusID, RequestType, InNetworkReceiverOffice, DatePrinted) VALUES (" + strPID + ",2,GetDate(),1,1,45784,'" + strPrintDate + "')"; strDel = "1"; strDestOffice = "45784"; break; case "email": sql = "INSERT Transcript_Requests (PortfolioID, RecipientTypeID, DateRequested, RecipientEmail, InstitutionOther, StatusID, RequestType, DatePrinted) VALUES (" + strPID + ",1,GetDate(),'"; sql += CCLib.Common.Strings.FormatUserInput(txtEmail.Value) + "','" + CCLib.Common.Strings.FormatUserInput(txtName.Value) + "',1,2,'" + strPrintDate + "')"; strDel = "2"; strDestEmail = CCLib.Common.Strings.FormatUserInput(txtEmail.Value); strDestSchool = CCLib.Common.Strings.FormatUserInput(txtName.Value); break; case "school": sql = "INSERT Transcript_Requests (PortfolioID, RecipientTypeID, DateRequested, InstitutionID, InNetworkReceiverOffice, StatusID, RequestType, DatePrinted) VALUES (" + strPID + ",1,GetDate(),"; sql += strSchool + "," + CCLib.Common.Strings.GetFormString("selReceiver") + ",1,1,'" + strPrintDate + "')"; strDel = "1"; strDestOffice = CCLib.Common.Strings.GetFormString("selReceiver"); break; } } } intRequestId = CCLib.Common.DataAccess.ExecuteDbWithIntResult(sql + ";select @@identity"); string RID = intRequestId.ToString(); var ser = new ScripSafe(); string strStatus = "2"; DataTable dtStuInfo = CCLib.Common.DataAccess.GetDataTable("SELECT p.StudentID, t.TranscriptID, t.DateReceived from Transcript_Transcripts t join Portfolio p on t.PortfolioID=p.PortfolioID where t.PortfolioID=" + strPID); string strMessage = ser.ConfirmTranscriptRequest(RID, AdminInfo["SchoolID"].ToString(), dtStuInfo.Rows[0]["StudentID"].ToString(), dtStuInfo.Rows[0]["TranscriptID"].ToString(), strDestOffice, strDestSchool, strDestEmail); if (strMessage == "Confirmation Request Recieved") { // Change the status strStatus = "1"; CCLib.Common.DataAccess.ExecuteDb("UPDATE Transcript_Requests SET Confirmed=1, StatusId=2, DateSent=GetDate() where RequestID=" + RID); } //Response.Write(CCLib.Common.Forms.JavaScriptNotify("In response to the request, Scrip-Safe said: " + strMessage)); //Response.End(); Response.Redirect("TranscriptRequestList.aspx?T=1&S=1"); } //Response.Redirect("TranscriptRequestConfirmation.aspx?RID=" + intRequestId.ToString() + "&DEL=" + strDel); pid.Value = CCLib.Common.Strings.GetQueryString("pid"); string strTDate = CCLib.Common.DataAccess.GetValue("SELECT top 1 DateReceived from Transcript_Transcripts where PortfolioID=" + pid.Value + " ORDER BY TranscriptID DESC").ToString(); var states = CCLib.Common.Strings.strsUSStateDes; var stateAbbv = CCLib.Common.Strings.strsUSStateCode; printdate.Value = strTDate; for (int c = 0; c < states.Count(); c++) { ListItem item = new ListItem(states[c], stateAbbv[c]); if (stateAbbv[c] == AdminInfo["State"].ToString()) item.Selected = true; selState.Items.Add(item); } if (AdminInfo["State"].ToString() != "") { // Populate the schools too DataTable dtSchools = CCLib.Common.DataAccess.GetDataTable("SELECT INUN_ID, [NAME] + ' - ' + CITY AS 'NAME' FROM dbo.UX_INST WHERE STATE_CODE='" + AdminInfo["State"] + "' ORDER BY [NAME]"); for (int c = 0; c < dtSchools.Rows.Count; c++) { ListItem item = new ListItem(dtSchools.Rows[c]["NAME"].ToString(), dtSchools.Rows[c]["INUN_ID"].ToString()); selSchool.Items.Add(item); } } #region Properties For The School Base Class TitleBar = "Application Planner"; SubTitleBar = "Transcript List"; #endregion Properties For The School Base Class }
protected void Page_Load(object sender, EventArgs e) { #region Check Login CheckSchoolAdminSession(); #endregion Check Login if (Request.ServerVariables["REQUEST_METHOD"] == "POST") { string uSQL = ""; string RID = hidRID.Value; string strEmail = (CCLib.Common.Strings.GetFormString("txtRecipEmail").Length > 0) ? txtRecipEmail.Value : ""; string strSchool = hidSchool.Value ; string strMessage = ""; string strStatus = "0"; // update the thing if (CCLib.Common.Strings.GetFormString("delMethod") == "3") { uSQL = "UPDATE Transcript_Requests SET RequestType=3, IsMailed=1, Confirmed=1, StatusID=3, DateSent='" + txtMailDate.Value + "', AdminID=" + AdminInfo["AdminID"] + " where RequestID=" + hidRID.Value; strStatus = "2"; CCLib.Common.DataAccess.ExecuteDb(uSQL); } else { if (CCLib.Common.Strings.GetFormString("delMethod") == "2") { uSQL = "UPDATE Transcript_Requests SET RequestType=2, RecipientEmail='" + txtRecipEmail.Value + "', AdminID=" + AdminInfo["AdminID"] + " where RequestID=" + RID; } else { uSQL = "UPDATE Transcript_Requests SET RequestType=1, InNetworkReceiverOffice=" + ddlReceiver.SelectedValue; uSQL += " WHERE RequestID=" + RID; } CCLib.Common.DataAccess.ExecuteDb(uSQL); var ser = new ScripSafe(); strMessage = ser.ConfirmTranscriptRequest(RID, AdminInfo["SchoolID"].ToString(), hidStu.Value, hidTID.Value, ddlReceiver.SelectedValue, strSchool, strEmail); if (strMessage == "Confirmation Request Recieved") { // Change the status strStatus = "1"; CCLib.Common.DataAccess.ExecuteDb("UPDATE Transcript_Requests SET Confirmed=1, StatusId=2, DateSent=GetDate() where RequestID=" + RID); } //Response.Write(CCLib.Common.Forms.JavaScriptNotify("In response to the request, Scrip-Safe said: " + strMessage)); } Response.Redirect("TranscriptRequestList.aspx?T=1&S=" + strStatus); } string strTranscript = CCLib.Common.Strings.GetQueryString("TID"); strDelType = CCLib.Common.Strings.GetQueryString("Type"); var sql = new System.Text.StringBuilder(); sql.Append(@"SELECT r.RequestId, p.FirstName + ' ' + p.LastName AS 'FullName', u.NAME, t.DateReceived, r.DateRequested, r.DateRead, r.DateSent, r.DateExpired, r.StatusID, sl.Descr" + SuffixCode() + @" as StatusDescr, r.InstitutionOther, trt.Descr" + SuffixCode() + @" as ReceiverDescription, tir.Description as OfficeDescr, tir.ScripSafeID, r.RecipientEmail, gnl.GradeDescr" + SuffixCode() + @" as GradeDescr, p.StudentID, t.TranscriptID FROM dbo.Transcript_Requests r JOIN dbo.Portfolio p ON r.PortfolioID = p.PortfolioID JOIN GradeNumberLookup gnl on p.GradeNumber=gnl.GradeNumber LEFT OUTER JOIN dbo.UX_INST u ON r.InstitutionID=u.INUN_ID LEFT OUTER JOIN dbo.Transcript_Transcripts t ON r.PortfolioID=t.PortfolioID JOIN dbo.Transcript_Status_Lookup sl ON r.StatusID=sl.StatusID LEFT OUTER JOIN Transcript_InNetworkRecipients tir on r.InstitutionID=tir.CareerCruisingID LEFT OUTER JOIN Transcript_ReceipientType_Lookup trt on tir.RecipientTypeID=trt.RecipientTypeID WHERE r.RequestId=" + strTranscript); dtDetails = CCLib.Common.DataAccess.GetDataTable(sql.ToString()); ddlReceiver.DataSource = dtDetails; ddlReceiver.DataTextField = "OfficeDescr"; ddlReceiver.DataValueField = "ScripSafeID"; ddlReceiver.DataBind(); if (ddlReceiver.Items.Count > 1) ddlReceiver.Items.Insert(0, new ListItem("-Please Select-", "")); hidRID.Value = strTranscript; hidStu.Value = dtDetails.Rows[0]["StudentID"].ToString(); hidTID.Value = dtDetails.Rows[0]["TranscriptID"].ToString(); hidSchool.Value = (dtDetails.Rows[0]["NAME"] != DBNull.Value) ? dtDetails.Rows[0]["NAME"].ToString() : dtDetails.Rows[0]["InstitutionOther"].ToString(); txtRecipEmail.Value = dtDetails.Rows[0]["RecipientEmail"].ToString(); if (dtDetails.Rows[0]["OfficeDescr"] == DBNull.Value) { pnlOutNetwork.Visible = true; pnlInNetwork.Visible = false; } else { pnlOutNetwork.Visible = false; pnlInNetwork.Visible = true; } if (strDelType == "M") { // It's a mail only option so hide some stuff pnlInNetwork.Visible = false; pnlOutNetwork.Visible = true; trElectronicDel.Visible = false; delMethod1Wrapper.Visible = false; delMethod2Wrapper.Visible = false; trDelOptions.Visible = true; trMailDel.Visible = true; hidDelType.Value = "3"; } uc1.argTitle = new string[] { "Help", "Help" }; uc1.argContent = new string[] { "You can send electronic transcripts outside of the Scrip Safe network. You simply specify the email address of the transcript recipient. Note: you are NOT emailing the transcript. The recipient will receive an email and then create a login where he or she can then securely download the transcript." }; uc1.intTagNum = 1; uc1.TagID = new string[] { "1" }; uc1.strBgColor = "#f0ede3"; uc1.strHeader = "contentTableHeaderDarkBG"; uc1.ShowDirection = "right-bottom"; uc2.argTitle = new string[] { "Help" }; uc2.argContent = new string[] { "Select this option if the college cannot accept electronic transcripts. If this is the case, you will need to physically print and mail the transcript to the college." }; uc2.intTagNum = 1; uc2.TagID = new string[] { "2" }; uc2.strBgColor = "#f0ede3"; uc2.strHeader = "contentTableHeaderDarkBG"; uc2.ShowDirection = "right-bottom"; // Deal with situations where the request has already been sent. if (Convert.ToInt32(dtDetails.Rows[0]["StatusID"]) > 1) { pnlInNetwork.Visible = false; pnlOutNetwork.Visible = false; pnlDeliveryOptions.Visible = false; switch (CCLib.Common.Strings.GetQueryString("S")) { case "0": strAlertMessage = "Scrip Safe reported an error when sending the request."; break; case "1": strAlertMessage = "The request was sent successfully."; break; case "2": strAlertMessage = "The request's information has been updated to reflect the mail date."; break; } } #region Properties For The School Base Class TitleBar = "Application Planner"; SubTitleBar = "Transcript Details"; #endregion Properties For The School Base Class }