using framework_business; using framework_library; using System; using System.Collections; using System.Collections.Generic; using System.Configuration; using System.Data; using System.Drawing; using System.Globalization; using System.IO; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; using System.Web; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using Telerik.Web.UI; public partial class controls_surface_surface_grid : ISurfaceBase { private const string surfacePath = "~/controls/surface/"; private const string controlPath = "~/controls/"; private const string tempPath = "~/upload/temp/"; private bool mailSent = false; //TSP JasR 2016-01-26 - used for patient registration // This will be a list of all the fields that needs to be totalled - Dictionary //private Dictionary totals = new Dictionary(); //private Dictionary average = new Dictionary(); #region override /// /// Reload Control /// /// /// /// /// public override void ReloadControl(oSurfaceItem item, bool isView, bool isNew, bool isPersisting = false) { oUser user = handler.ReturnUser(); int startIndex = 0; int maxLength = 50; if (MainGridOptions.pagingCount > 0) { maxLength = MainGridOptions.pagingCount; if (ddSurfaceEntries.Items.FindByValue(MainGridOptions.pagingCount.ToString()) != null) ddSurfaceEntries.SelectedValue = MainGridOptions.pagingCount.ToString(); } btnNew.Visible = (user.userType >= MainGridOptions.addAccessType && user.userType != (int)pNums.UserType.CustomUser) || (user.mimicUserType >= MainGridOptions.addAccessType && user.userType == (int)pNums.UserType.CustomUser); BindSurfaceGridColumnFilters(false); //CVH 2017-04-13 Preset Status filter on Profiles surface to current Canvas oSetup setup = handler.ReturnSetup(); if (setup.code == "STUD-1" && base.SurfaceApp.name == "Profiles") { STUD1_PreSelectProfilesFilter(); BindSurfaceGridColumnFilters(true); } BindSurfaceGrid(startIndex, maxLength); } /// /// Overridible Save Control /// public override void SaveControl(bool finish, bool draft, bool closing) { } #endregion #region methods /// /// Method to Bind the surface Grid /// private int BindSurfaceGrid(int startIndex, int maxRecords) { int recCount = 0; try { oUser user = handler.ReturnUser(); oSetup setup = handler.ReturnSetup(); if (base.SurfaceApp != null) { oSurface surfaceApp = base.SurfaceApp; DataTable surfaceData = new DataTable(); //CVH 2017-01-31 Add filter string filter = BuildSurfaceGridFilter(); string searchVal = txbSearchSurface.Value; //userLink specifics int userLink = 0; if (utils.verifySession("user")) user = (oUser)Session["user"]; if (surfaceApp.linkUser && user.userType == (int)pNums.UserType.WebsiteUser) userLink = user.recId; int TotalRows = 0; if (surfaceApp.isPublished) TotalRows = xData.GetPublishedSurfaceDataCount(surfaceApp.recId, userLink, searchVal, filter); else TotalRows = xData.GetSurfaceQueryDataCount(surfaceApp.recId, userLink, searchVal, filter); if ((TotalRows / maxRecords).ToString().Contains(".")) { lblPageCount.Text = (int.Parse((((TotalRows / maxRecords) + 1)).ToString().Substring(0, (((TotalRows / maxRecords) + 1)).ToString().IndexOf("."))) + 2).ToString(); } else { lblPageCount.Text = ((TotalRows / maxRecords) + 1).ToString(); } if (lblPageCount.Text == "1") { btnPageBack.Enabled = false; btnPageNext.Enabled = false; txbPageNumber.Disabled = true; } else { btnPageBack.Enabled = true; btnPageNext.Enabled = true; txbPageNumber.Disabled = false; } lblCount.Text = TotalRows.ToString(); int pageIndex = 1; if (txbPageNumber.Value != String.Empty) int.TryParse(txbPageNumber.Value, out pageIndex); if (pageIndex > int.Parse(lblPageCount.Text)) pageIndex = int.Parse(lblPageCount.Text); if (pageIndex > 0) startIndex = (pageIndex - 1) * maxRecords; else startIndex = 0 * maxRecords; //set the display fields if (pageIndex > 0) txbPageNumber.Value = (pageIndex).ToString(); else txbPageNumber.Value = "1"; //TO DO sort ordering string orderBy = BuildSurfaceOrderBy(base.SurfaceApp.recId); //CVH 2017-04-12 Hardcode SBF Termly Review sort by lowest Term first //JR 2017-04-14 Orderby can now get built using gridoptions //string orderBy = String.Empty; //if (setup.code == "STUD-1" && SurfaceApp.name.StartsWith("TermlyReview")) //{ // //find field with display "Term" // foreach (oSurfaceField termField in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceField), "surfaceId,surfaceFieldDisplay,isActive", surfaceApp.recId + ",Term,1")) // { // orderBy = termField.surfaceFieldName; // break; // } //} if (surfaceApp.isPublished) surfaceData = xData.GetPublishedSurfaceDataPaged(surfaceApp.recId, startIndex, maxRecords, orderBy, searchVal, User.recId, userLink, filter, false); else //fetch the paged data surfaceData = xData.GetSurfaceQueryDataPaged(surfaceApp.recId, startIndex, maxRecords, orderBy, searchVal, User.recId, userLink, filter, false); if (surfaceData != null) recCount = surfaceData.Rows.Count; foreach (Control rpt in pnlSurfaceGrid.Controls) { if (rpt.GetType() == typeof(Repeater)) { Repeater repeater = (Repeater)rpt; SetAggregates(surfaceData, surfaceApp.recId); repeater.DataSource = surfaceData; repeater.DataBind(); if (setup.code == "STUD-1" && base.SurfaceApp.name.StartsWith("Profiles")) { STUD1_SetProfilesVisibleColumns(repeater, user); } } } } } catch (Exception ex) { exception.HandleException("surface:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } return recCount; } private string BuildSurfaceOrderBy(int surfaceId) { string returnString = ""; foreach (oSurfaceGridOptions options in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceGridOptions), "surfaceId", surfaceId.ToString())) { returnString = options.defaultSort; } return returnString; } /// /// Set Aggreagete Data /// /// private void SetAggregates(DataTable surfaceData, int surfaceId) { try { Dictionary localTotals = SurfaceGridTotals; Dictionary localAverages = SurfaceGridAverages; foreach (oSurfaceGridOptions gridOptions in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceGridOptions), "surfaceId", surfaceId.ToString())) { if (gridOptions.showAggregate) { foreach (oSurfaceGridAggregate agg in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceGridAggregate), "surfaceId", surfaceId.ToString())) { foreach (oSurfaceField field in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceField), "recId", agg.surfaceFieldId.ToString())) { if (localTotals.ContainsKey(field.surfaceFieldName)) localTotals.Remove(field.surfaceFieldName); localTotals.Add(field.surfaceFieldName, 0); if (localAverages.ContainsKey(field.surfaceFieldName)) localAverages.Remove(field.surfaceFieldName); localAverages.Add(field.surfaceFieldName, 0); } } } } SurfaceGridTotals = localTotals; SurfaceGridAverages = localAverages; //CVH 2017-03-22 Moving, otherwise keys = 0 sumDataTable(surfaceData); } catch (Exception ex) { exception.HandleException("surface:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } } private void STUD1_SetProfilesVisibleColumns(Repeater repeater, oUser user) { try { //get surface with column order if (handler.GetRoutedData("canvas-title").Contains(base.SurfaceApp.name.ToLower())) { foreach (oCanvas canvas in xData.GetTypedByCriteriaSpecific("recId", typeof(oCanvas), "name", handler.GetRoutedData("canvas-title"))) { foreach (oSurface colSurface in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurface), "surface", canvas.display + " Columns")) { //get column order DataTable dtColumnOrder = xData.GetSurfaceQueryDataPaged(colSurface.recId, 0, 500, "", "", user.recId, 0, ""); oSurfaceField colField = new oSurfaceField(); oSurfaceField colGrid = new oSurfaceField(); foreach (oSurfaceField col in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceField), "surfaceId", colSurface.recId.ToString())) { if (col.surfaceFieldName.EndsWith("Field")) colField = col; else if (col.surfaceFieldName.EndsWith("OnGrid")) colGrid = col; } if (colField.recId <= 0 || colGrid.recId <= 0 || dtColumnOrder.Columns[colField.surfaceFieldName] == null || dtColumnOrder.Columns[colGrid.surfaceFieldName] == null) break; foreach (DataRow colRow in dtColumnOrder.Rows) { HtmlTableCell thCol = (HtmlTableCell)repeater.Controls[0].Controls[0].FindControl("th" + colRow[colField.surfaceFieldName].ToString()); if (thCol != null) { if (colRow[colGrid.surfaceFieldName].ToString() != "1") { thCol.Attributes.Add("data-visible", "false"); thCol.Attributes["data-priority"] = "99"; } else { thCol.Attributes.Remove("date-visible"); } } } break; } } } } catch (Exception ex) { exception.HandleException("surface:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); } } private void STUD1_PreSelectProfilesFilter() { try { foreach (oSurfaceField field in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceField), "surfaceId,isFilter,surfaceFieldDisplay", base.SurfaceApp.recId + ",1,Status", "sequence")) { HtmlGenericControl divFilter = (HtmlGenericControl)divFilterColumns.FindControl("divFilter_" + field.surfaceFieldName); ListBox colFilter = (ListBox)divFilterColumns.FindControl("colFilter_" + field.surfaceFieldName); if (divFilter == null || colFilter == null) continue; if (handler.GetRoutedData("canvas-title").Contains(base.SurfaceApp.name.ToLower())) { string currentStatus = handler.GetRoutedData("canvas-title").Replace(base.SurfaceApp.name.ToLower(), ""); if (currentStatus.Length > 0) { ListItem selectedItem = null; foreach (ListItem itm in colFilter.Items) { if (itm.Text.Replace(" ", "").ToLower() == currentStatus) { selectedItem = itm; break; } } if (selectedItem == null) { colFilter.Items.Add(new ListItem("-", "-")); colFilter.Items.FindByValue("-").Selected = true; } else { colFilter.Items.FindByValue(selectedItem.Value).Selected = true; } colFilter.Attributes.Add("disabled", "true"); } } } } catch (Exception ex) { exception.HandleException("surface:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } } /// /// Build Surface Grid Filter /// /// private string BuildSurfaceGridFilter() { string filter = ""; try { //if (!divFilterColumns.Visible) // return filter; if (!MainGridOptions.allowFilter) return filter; StringBuilder filterBuilder = new StringBuilder(); foreach (oSurfaceField field in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceField), "surfaceId,isFilter", base.SurfaceApp.recId + ",1", "sequence")) { ListBox colFilter = (ListBox)divFilterColumns.FindControl("colFilter_" + field.surfaceFieldName); if (colFilter == null) continue; bool numeric = false; if (field.surfaceFieldTypeId == (int)pNums.FieldType.Number || field.surfaceFieldTypeId == (int)pNums.FieldType.Decimal) numeric = true; int[] indices = colFilter.GetSelectedIndices(); string filterValues = ""; for (int i = 0; i < indices.Count(); i++) { string val = colFilter.Items[indices[i]].Value.Replace("'","''"); if (val == "(blank)") val = ""; //if (val != "" && field.surfaceFieldTypeId == (int)pNums.FieldType.Date && field.surfaceDateTypeId == (int)pNums.SurfaceDateType.Year) // val = val + "/01/01"; if (filterValues == String.Empty) filterValues = (numeric ? "" : "'") + val + (numeric ? "" : "'"); else filterValues += ", " + (numeric ? "" : "'") + val + (numeric ? "" : "'"); } if (filterValues != String.Empty) { //the first AND/WHERE is built on stored proc side if (filterBuilder.ToString() == String.Empty) filterBuilder.AppendLine(field.surfaceFieldName + " IN (" + filterValues + ") "); else filterBuilder.AppendLine(" AND " + field.surfaceFieldName + " IN (" + filterValues + ") "); } } filter = filterBuilder.ToString(); } catch (Exception ex) { exception.HandleException("surface:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } return filter; } /// /// Bind Surface Grid Column Filters /// /// private void BindSurfaceGridColumnFilters(bool retainSelections) { bool showFilterGroup = false; try { if (base.SurfaceApp == null) return; //foreach (oSurfaceGridOptions opt in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceGridOptions), "surfaceId", base.SurfaceApp.recId.ToString())) //{ if (!MainGridOptions.allowFilter) return; //} //build filter string filter = ""; //get search value string searchVal = txbSearchSurface.Value; if (retainSelections) { filter = BuildSurfaceGridFilter(); } //userLink specifics int userLink = 0; oUser user = new oUser(); if (utils.verifySession("user")) user = (oUser)Session["user"]; if (base.SurfaceApp.linkUser && user.userType == (int)pNums.UserType.WebsiteUser) userLink = user.recId; int TotalRows = 0; //get total rows if (base.SurfaceApp.isPublished) TotalRows = xData.GetPublishedSurfaceDataCount(base.SurfaceApp.recId, userLink, searchVal, filter); else TotalRows = xData.GetSurfaceQueryDataCount(base.SurfaceApp.recId, userLink, searchVal, filter); DataTable dtSurfaceData = new DataTable(); if (base.SurfaceApp.isPublished) dtSurfaceData = xData.GetPublishedSurfaceDataPaged(base.SurfaceApp.recId, 0, TotalRows, "", searchVal, User.recId, userLink, filter); else //get surface data dtSurfaceData = xData.GetSurfaceQueryDataPaged(base.SurfaceApp.recId, 0, TotalRows, "", searchVal, User.recId, userLink, filter); //get Toggle View Visible action Id int visibleActionId = 0; foreach (oSurfaceAction act in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceAction), "actionType,action", (int)pNums.ActionType.ToggleView + ",Visible")) { visibleActionId = act.recId; } bool showColFilter = true; //get all filter fields ArrayList fields = xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceField), "surfaceId,isFilter", base.SurfaceApp.recId + ",1", "sequence"); foreach (oSurfaceField field in fields) { HtmlGenericControl divColFilter = (HtmlGenericControl)divFilterColumns.FindControl("divFilter_" + field.surfaceFieldName); ListBox colFilter = (ListBox)divFilterColumns.FindControl("colFilter_" + field.surfaceFieldName); if (colFilter == null || divColFilter == null) continue; //if field is toggle view, determine if the source field is a filter field if (field.actionType == (int)pNums.ActionType.ToggleView && field.action == visibleActionId) { showColFilter = false; //build value to match string valueToMatch = ""; foreach (var val in field.actionValue.Split(';')) { valueToMatch += "|" + val + "|"; } foreach (oSurfaceField toggleSource in fields) { if (toggleSource.recId == field.actionSource) { //get toggle source listbox, and determine if toggle value has been selected ListBox colSource = (ListBox)divFilterColumns.FindControl("colFilter_" + toggleSource.surfaceFieldName); if (colSource != null) { foreach (ListItem sourceItem in colSource.Items) { if (sourceItem.Selected && valueToMatch.Contains("|" + sourceItem.Value + "|")) { showColFilter = true; break; } } } break; } } } if (showColFilter) { divColFilter.Visible = true; divColFilter.Attributes.Remove("style"); } else { //clear filter and don't show colFilter.ClearSelection(); colFilter.Items.Clear(); divColFilter.Attributes.Add("style", "display: none"); continue; } //get list of selected items to reapply if selections need to be retained int[] indices = colFilter.GetSelectedIndices(); string[] selections = new string[indices.Count()]; //replace index with value, rebinding list so indices might change for (int i = 0; i < indices.Count(); i++) { selections[i] = colFilter.Items[indices[i]].Value; } DataTable dtFilter = dtSurfaceData.DefaultView.ToTable(true, field.surfaceFieldName); colFilter.ClearSelection(); colFilter.Items.Clear(); //replace spaces with   foreach (DataRow row in dtFilter.Rows) { if (field.surfaceFieldTypeId == (int)pNums.FieldType.Date) { if (field.surfaceDateTypeId == (int)pNums.SurfaceDateType.Year) { DateTime dtYear = new DateTime(); if (DateTime.TryParse(row[0].ToString(), out dtYear)) row[0] = dtYear.Year.ToString(); colFilter.Items.Add(new ListItem(row[0].ToString(), row[0].ToString())); } else { if (row[0].ToString().Trim() != String.Empty) { string date = utils.formatDateToString(DateTime.Parse(row[0].ToString())); string dateVal = string.Format("{0:yyyy-MM-dd}", row[0]); colFilter.Items.Add(new ListItem(date, dateVal)); } } } else { if (row[0].ToString().Trim() != String.Empty) colFilter.Items.Add(new ListItem(row[0].ToString(), row[0].ToString())); } } //colFilter.DataSource = dtFilter; //colFilter.DataTextField = field.surfaceFieldName; //colFilter.DataValueField = field.surfaceFieldName; //colFilter.DataBind(); showFilterGroup = true; if (retainSelections) { foreach (string selected in selections) { if (colFilter.Items.FindByValue(selected) != null) { colFilter.Items.FindByValue(selected).Selected = true; } else { oSetup setup = handler.ReturnSetup(); if (setup.code == "STUD-1" && base.SurfaceApp.name == "Profiles") { colFilter.Items.Add(new ListItem(selected, selected)); colFilter.Items.FindByValue(selected).Selected = true; } } //foreach (ListItem item in colFilter.Items) //{ // if (item.Value == selected) // item.Selected = true; //} } } } } catch (Exception ex) { exception.HandleException("surface:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } finally { if (showFilterGroup) divFilterColumns.Visible = true; else divFilterColumns.Visible = false; } } private void CloneSurface(int itemId) { try { foreach (oSurfaceItem item in xData.GetTypedByCriteriaSpecific("rcId", typeof(oSurfaceItem), "recId", itemId.ToString())) { base.IsClone = true; pNums.SurfaceGridEditType editType = (pNums.SurfaceGridEditType)Enum.ToObject(typeof(pNums.SurfaceGridEditType), base.SurfaceAppGridEditTypeId); //Go to surface form control oSurfaceControlParcel parcel = new oSurfaceControlParcel(); parcel.SurfaceApp = base.SurfaceApp; parcel.SurfaceAppItem = item; parcel.IsClone = true; Session["SurfaceControlParcel"] = parcel; Response.Redirect(Request.Url.AbsoluteUri.Split('?')[0] + "?mode=form", false); } } catch (Exception ex) { exception.HandleException("surface:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } } private void ToggleHeadingButtonVisibility(bool show, LinkButton btn) { try { /* CVH 2016-08-31 Need to toggle visibility of Add New button. Should only be visible on Grid. Can't use noShow, it will break GridSurfaceOptions */ string classname = "noShowSurfaceAdd"; if (show) { //show Add New - remove class noShow btn.CssClass = String.Join(" ", btn .CssClass .Split(' ') .Except(new string[] { "", classname }) .ToArray() ); } else { //hide Add New - add class noShow btn.CssClass = String.Join(" ", btn .CssClass .Split(' ') .Except(new string[] { "", classname }) .Concat(new string[] { classname }) .ToArray() ); } } catch { } } /// /// Method to Toggle Panels /// /// private void TogglePanels(string panelName) { switch (panelName) { case "pnlSurfaceGrid": ToggleHeadingButtonVisibility(true, btnNew); ToggleHeadingButtonVisibility(true, btnBulkUpdate); ToggleHeadingButtonVisibility(false, btnEdit); pnlSurfaceGrid.Visible = true; pnlSurfaceCompare.Visible = false; break; case "pnlSurfaceCompare": ToggleHeadingButtonVisibility(true, btnNew); ToggleHeadingButtonVisibility(true, btnBulkUpdate); ToggleHeadingButtonVisibility(false, btnEdit); pnlSurfaceGrid.Visible = false; pnlSurfaceCompare.Visible = true; break; } upHeading.Update(); } /// /// Set all rows in grid to edit mode true/false /// /// /// AUTHOR: Charlene van Heerden /// DATE WRITTEN: 1 February 2016 /// private void ToggleGridEdit(bool editMode, Repeater rptEdit, int itemID, int surfaceId) { try { ArrayList surfaceFields = xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceField), "surfaceId", surfaceId.ToString(), "sequence"); //change edit + delete column headings HtmlTableCell thEdit = (HtmlTableCell)rptEdit.Controls[0].Controls[0].FindControl("thEdit"); HtmlTableCell thRemove = (HtmlTableCell)rptEdit.Controls[0].Controls[0].FindControl("thRemove"); if (editMode) { if (thEdit != null) thEdit.InnerText = "Save"; if (thRemove != null) thRemove.InnerText = "Cancel"; } else { if (thEdit != null) thEdit.InnerText = "Edit"; if (thRemove != null) thRemove.InnerText = "Delete"; } foreach (RepeaterItem repeaterItem in rptEdit.Items) { LinkButton lnkEdit = null, lnkSaveRow = null, lnkRemove = null, lnkCancel = null, lnkView = null; lnkEdit = (LinkButton)repeaterItem.FindControl("lnkEdit"); lnkSaveRow = (LinkButton)repeaterItem.FindControl("lnkSaveRow"); lnkRemove = (LinkButton)repeaterItem.FindControl("lnkRemove"); lnkCancel = (LinkButton)repeaterItem.FindControl("lnkCancel"); lnkView = (LinkButton)repeaterItem.FindControl("lnkView"); if (editMode) { if (lnkEdit != null) lnkEdit.AddCssClass("noShow"); if (lnkSaveRow != null) lnkSaveRow.RemoveCssClass("noShow"); if (lnkRemove != null) lnkRemove.AddCssClass("noShow"); if (lnkCancel != null) lnkCancel.RemoveCssClass("noShow"); if (lnkView != null) lnkView.AddCssClass("noShow"); } else { if (lnkEdit != null) lnkEdit.RemoveCssClass("noShow"); if (lnkSaveRow != null) lnkSaveRow.AddCssClass("noShow"); if (lnkRemove != null) lnkRemove.RemoveCssClass("noShow"); if (lnkCancel != null) lnkCancel.AddCssClass("noShow"); if (lnkView != null) lnkView.RemoveCssClass("noShow"); } foreach (oSurfaceField field in surfaceFields) { if ((field.isGrid && field.isActive && field.surfaceFieldTypeId != (int)pNums.FieldType.Tab && field.surfaceFieldTypeId != (int)pNums.FieldType.Group && field.surfaceFieldTypeId != (int)pNums.FieldType.HeaderGroup && field.surfaceFieldTypeId != (int)pNums.FieldType.Attachment && field.surfaceFieldTypeId != (int)pNums.FieldType.Button && field.surfaceFieldTypeId != (int)pNums.FieldType.Composite && field.surfaceFieldTypeId != (int)pNums.FieldType.Content && field.surfaceFieldTypeId != (int)pNums.FieldType.Control && field.surfaceFieldTypeId != (int)pNums.FieldType.Debtors && field.surfaceFieldTypeId != (int)pNums.FieldType.FormulaField && field.surfaceFieldTypeId != (int)pNums.FieldType.Grid && field.surfaceFieldTypeId != (int)pNums.FieldType.Label && field.surfaceFieldTypeId != (int)pNums.FieldType.Mediswitch && field.surfaceFieldTypeId != (int)pNums.FieldType.Note && field.surfaceFieldTypeId != (int)pNums.FieldType.Placeholder && field.surfaceFieldTypeId != (int)pNums.FieldType.RelationalField && field.surfaceFieldTypeId != (int)pNums.FieldType.Sales) || field.surfaceFieldName == "ParentSurfaceItemId" ) { Label lbl = (Label)repeaterItem.FindControl("lbl" + field.surfaceFieldName); pNums.FieldType typ = (pNums.FieldType)Enum.ToObject(typeof(pNums.FieldType), field.surfaceFieldTypeId); if (lbl != null) { if (field.isCurrency && lbl.Parent.GetType() == typeof(HtmlGenericControl)) { HtmlGenericControl currencyLabelParent = (HtmlGenericControl)lbl.Parent; if (editMode) { currencyLabelParent.Attributes.Remove("class"); currencyLabelParent.Attributes.Add("class", "input-group noShow"); } else { currencyLabelParent.Attributes.Remove("class"); currencyLabelParent.Attributes.Add("class", "input-group"); } } else { if (editMode) lbl.AddCssClass("noShow"); else lbl.RemoveCssClass("noShow"); } } HtmlTableCell tdCell = (HtmlTableCell)repeaterItem.FindControl("td" + field.surfaceFieldName); if (tdCell != null) { if (editMode) tdCell.Attributes.Add("class", "noPad"); else tdCell.Attributes.Remove("class"); } switch (typ) { #region Text case pNums.FieldType.Text://Textbox TextBox txtTextbox = (TextBox)repeaterItem.FindControl(field.surfaceFieldName); if (txtTextbox != null) { if (editMode) { txtTextbox.RemoveCssClass("noShow"); } else { txtTextbox.AddCssClass("noShow"); } } break; #endregion #region Number case pNums.FieldType.Number: //number TextBox txtNumberBox = (TextBox)repeaterItem.FindControl(field.surfaceFieldName); if (txtNumberBox != null) { if (editMode) { txtNumberBox.RemoveCssClass("noShow"); } else { txtNumberBox.AddCssClass("noShow"); } } break; #endregion #region Decimal case pNums.FieldType.Decimal: //decimal TextBox txtDecimalBox = (TextBox)repeaterItem.FindControl(field.surfaceFieldName); if (txtDecimalBox != null) { if (field.isCurrency && txtDecimalBox.Parent.GetType() == typeof(HtmlGenericControl)) { HtmlGenericControl decimalParent = (HtmlGenericControl)txtDecimalBox.Parent; if (decimalParent != null) { if (editMode) { decimalParent.Attributes.Remove("class"); decimalParent.Attributes.Add("class", "input-group"); } else { decimalParent.Attributes.Remove("class"); decimalParent.Attributes.Add("class", "input-group noShow"); } } } else { if (editMode) { txtDecimalBox.RemoveCssClass("noShow"); } else { txtDecimalBox.AddCssClass("noShow"); } } } break; #endregion #region Picklist case pNums.FieldType.Picklist: //picklist HtmlGenericControl ddlParent = (HtmlGenericControl)repeaterItem.FindControl("div" + field.surfaceFieldName); DropDownList ddDropdownlist = (DropDownList)repeaterItem.FindControl(field.surfaceFieldName); if (ddlParent != null && ddDropdownlist != null) { if (editMode) { if (ddDropdownlist.Items.FindByText(lbl.Text) != null) { ddDropdownlist.ClearSelection(); ddDropdownlist.Items.FindByText(lbl.Text).Selected = true; } ddlParent.Attributes.Remove("class"); } else { ddlParent.Attributes.Add("class", "noShow"); } } break; #endregion #region MulltiPicklist case pNums.FieldType.MultiPicklist: ListBox listBox = (ListBox)repeaterItem.FindControl(field.surfaceFieldName); if (listBox != null) { if (editMode) { string selectedItem = lbl.Text; listBox.ClearSelection(); foreach (string item in selectedItem.Split(';')) { foreach (ListItem lst in listBox.Items) { if (lst.Text.Trim() == item.Trim()) lst.Selected = true; } } //listBox.RemoveCssClass("noShow"); listBox.Visible = true; } else { //listBox.AddCssClass("noShow"); listBox.Visible = false; } } break; #endregion #region Date case pNums.FieldType.Date: //date TextBox txtDate = (TextBox)repeaterItem.FindControl(field.surfaceFieldName); if (txtDate != null) { HtmlGenericControl dateParent = (HtmlGenericControl)txtDate.Parent; if (dateParent != null) { if (editMode) { dateParent.Attributes.Remove("class"); dateParent.Attributes.Add("class", "input-group date"); } else { dateParent.Attributes.Remove("class"); dateParent.Attributes.Add("class", "input-group date noShow"); } } } break; #endregion #region Checkbox case pNums.FieldType.Checkbox: //checkbox if (repeaterItem.FindControl(field.surfaceFieldName).GetType().Name == "CheckBox") { CheckBox chkBox = (CheckBox)repeaterItem.FindControl(field.surfaceFieldName); //CVH 2016-11-10 No edit label for field type checkbox has been changed to a read only checkbox CheckBox lblchk = (CheckBox)repeaterItem.FindControl("lblchk" + field.surfaceFieldName); if (chkBox != null && lblchk != null) { if (editMode) { lblchk.AddCssClass("noShow"); chkBox.RemoveCssClass("noShow"); } else { lblchk.RemoveCssClass("noShow"); chkBox.AddCssClass("noShow"); } } } else if (repeaterItem.FindControl(field.surfaceFieldName).GetType().Name == "HtmlInputCheckBox") { HtmlInputCheckBox chkBox = (HtmlInputCheckBox)repeaterItem.FindControl(field.surfaceFieldName); //CVH 2016-11-10 No edit label for field type checkbox has been changed to a read only checkbox HtmlInputCheckBox lblchk = (HtmlInputCheckBox)repeaterItem.FindControl("lblchk" + field.surfaceFieldName); if (chkBox != null && lblchk != null) { if (editMode) { lblchk.Attributes.Add("class", "noShow"); chkBox.Attributes.Remove("class"); } else { chkBox.Attributes.Add("class", "noShow"); lblchk.Attributes.Remove("class"); } } } break; #endregion #region Grid case pNums.FieldType.Grid: //grid //no action - no data is saved in grid field type break; #endregion #region Palceholder case pNums.FieldType.Placeholder: //no action break; #endregion #region Caption case pNums.FieldType.Caption: TextBox txtCaption = (TextBox)repeaterItem.FindControl(field.surfaceFieldName); if (txtCaption != null) { if (editMode) { txtCaption.RemoveCssClass("noShow"); } else { txtCaption.AddCssClass("noShow"); } } //HtmlTextArea textArea = (HtmlTextArea)repeaterItem.FindControl(field.surfaceFieldName); //if (textArea != null) //{ // if (editMode) // { // textArea.Attributes["class"].Replace("noShow", ""); // } // else // { // textArea.Attributes.Add("class", "noShow"); // } //} break; #endregion #region RelationalField case pNums.FieldType.RelationalField: if (lbl != null) lbl.RemoveCssClass("noShow"); break; #endregion } } } } } catch (Exception ex) { exception.HandleException("surface:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } } /// /// Method to Toggle Rows to Edit Mode /// private void ToggleRowEdit(int itemId, oSurfaceItem item, bool editMode, RepeaterItem rptItem) { try { ArrayList surfaceDataList = new ArrayList(); LinkButton lnkEdit = (LinkButton)rptItem.FindControl("lnkEdit"); if (int.Parse((lnkEdit).CommandArgument) == itemId) { SetRowMode(rptItem, item, editMode, ref surfaceDataList); } } catch (Exception ex) { exception.HandleException("surface:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } } /// /// Method to Set Row Mode /// /// /// /// /// /// REVISION 001: Add functionality for field type Grid /// AUTHOR: Charlene van Heerden /// DATE MODIFIED: 15 December 2015 /// private void SetRowMode(RepeaterItem repeaterItem, oSurfaceItem surfaceItem, bool editMode, ref ArrayList surfaceData) { try { //first fetch the field and data records ArrayList surfaceFields = xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceField), "surfaceId", surfaceItem.surfaceId.ToString(), "sequence"); DataTable surfaceFieldData = xData.GetTypedByCriteriaSpecificTable("recId", typeof(oSurfaceFieldData), "surfaceId,surfaceItemId", surfaceItem.surfaceId + "," + surfaceItem.recId, "recId"); DataTable myDataTable = new DataTable(); myDataTable = surfaceFieldData.Clone(); Label lblLabel = null; LinkButton lnkEdit = null, lnkSaveRow = null, lnkRemove = null, lnkCancel = null, lnkView = null; lnkEdit = (LinkButton)repeaterItem.FindControl("lnkEdit"); lnkSaveRow = (LinkButton)repeaterItem.FindControl("lnkSaveRow"); lnkRemove = (LinkButton)repeaterItem.FindControl("lnkRemove"); lnkCancel = (LinkButton)repeaterItem.FindControl("lnkCancel"); lnkView = (LinkButton)repeaterItem.FindControl("lnkView"); /* CVH 2016-01-30 Change column headings */ HtmlTableCell thEdit = (HtmlTableCell)repeaterItem.Parent.Controls[0].Controls[0].FindControl("thEdit"); HtmlTableCell thDelete = (HtmlTableCell)repeaterItem.Parent.Controls[0].Controls[0].FindControl("thDelete"); if (editMode) { /* CVH 2016-01-30 Change column headings */ if (thEdit != null) thEdit.InnerText = "Save"; if (thDelete != null) thDelete.InnerText = "Cancel"; if (lblLabel != null) lblLabel.AddCssClass("noShow"); if (lnkEdit != null) lnkEdit.AddCssClass("noShow"); if (lnkSaveRow != null) lnkSaveRow.RemoveCssClass("noShow"); if (lnkRemove != null) lnkRemove.AddCssClass("noShow"); if (lnkCancel != null) lnkCancel.RemoveCssClass("noShow"); if (lnkView != null) lnkView.AddCssClass("noShow"); } else { /* CVH 2016-01-30 Change column headings */ if (thEdit != null) thEdit.InnerText = "Edit"; if (thDelete != null) thDelete.InnerText = "Delete"; if (lblLabel != null) lblLabel.RemoveCssClass("noShow"); if (lnkEdit != null) lnkEdit.RemoveCssClass("noShow"); if (lnkSaveRow != null) lnkSaveRow.AddCssClass("noShow"); if (lnkRemove != null) lnkRemove.RemoveCssClass("noShow"); if (lnkCancel != null) lnkCancel.AddCssClass("noShow"); if (lnkView != null) lnkView.RemoveCssClass("noShow"); } /* CVH 2016-01-30 Add/Remove noShow for all other rows Edit & Delete buttons */ foreach (RepeaterItem rptOtherItem in ((Repeater)repeaterItem.Parent).Items) { if (rptOtherItem != repeaterItem) { //find Edit & Delete buttons LinkButton lnkEditOther = (LinkButton)rptOtherItem.FindControl("lnkEdit"); LinkButton lnkRemoveOther = (LinkButton)rptOtherItem.FindControl("lnkRemove"); LinkButton lnkViewOther = (LinkButton)rptOtherItem.FindControl("lnkView"); if (editMode) { if (lnkEditOther != null) lnkEditOther.AddCssClass("noShow"); if (lnkRemoveOther != null) lnkRemoveOther.AddCssClass("noShow"); if (lnkViewOther != null) lnkViewOther.AddCssClass("noShow"); } else { if (lnkEditOther != null) lnkEditOther.RemoveCssClass("noShow"); if (lnkRemoveOther != null) lnkRemoveOther.RemoveCssClass("noShow"); if (lnkViewOther != null) lnkViewOther.RemoveCssClass("noShow"); } } } foreach (oSurfaceField field in surfaceFields) { myDataTable.Clear(); //get the data for this field ID var v = from enVal in surfaceFieldData.AsEnumerable() where (enVal.Field("surfaceFieldID") == field.recId) select enVal; v.CopyToDataTable(myDataTable, LoadOption.OverwriteChanges); foreach (oSurfaceFieldData fieldData in utils.ConvertDataTableToList(myDataTable, typeof(oSurfaceFieldData))) { fieldData.surfaceFieldID = field.recId; fieldData.surfaceId = surfaceItem.surfaceId; fieldData.surfaceItemId = surfaceItem.recId; lblLabel = (Label)repeaterItem.FindControl("lbl" + field.surfaceFieldName); if (editMode) { if (lblLabel != null) lblLabel.AddCssClass("noShow"); } else { if (lblLabel != null) lblLabel.RemoveCssClass("noShow"); } if ((field.isGrid && field.isActive && field.surfaceFieldTypeId != (int)pNums.FieldType.Tab && field.surfaceFieldTypeId != (int)pNums.FieldType.Group && field.surfaceFieldTypeId != (int)pNums.FieldType.HeaderGroup && field.surfaceFieldTypeId != (int)pNums.FieldType.Attachment && field.surfaceFieldTypeId != (int)pNums.FieldType.Button && field.surfaceFieldTypeId != (int)pNums.FieldType.Composite && field.surfaceFieldTypeId != (int)pNums.FieldType.Content && field.surfaceFieldTypeId != (int)pNums.FieldType.Control && field.surfaceFieldTypeId != (int)pNums.FieldType.Debtors && field.surfaceFieldTypeId != (int)pNums.FieldType.FormulaField && field.surfaceFieldTypeId != (int)pNums.FieldType.Grid && field.surfaceFieldTypeId != (int)pNums.FieldType.Label && field.surfaceFieldTypeId != (int)pNums.FieldType.Mediswitch && field.surfaceFieldTypeId != (int)pNums.FieldType.Note && field.surfaceFieldTypeId != (int)pNums.FieldType.Placeholder && field.surfaceFieldTypeId != (int)pNums.FieldType.RelationalField && field.surfaceFieldTypeId != (int)pNums.FieldType.Sales) || field.surfaceFieldName == "ParentSurfaceItemId" ) { Label lblToSort = (Label)repeaterItem.FindControl("lblToSort" + field.surfaceFieldName); Label lbl = (Label)repeaterItem.FindControl("lbl" + field.surfaceFieldName); pNums.FieldType typ = (pNums.FieldType)Enum.ToObject(typeof(pNums.FieldType), field.surfaceFieldTypeId); switch (typ) { #region Text case pNums.FieldType.Text://Textbox TextBox txtTextbox = (TextBox)repeaterItem.FindControl(field.surfaceFieldName); if (txtTextbox != null) { //txtTextbox.Visible = editMode; if (editMode) { txtTextbox.RemoveCssClass("noShow"); string tmpVal = string.Empty; string value = string.Empty; if (myDataTable.Rows.Count > 0) tmpVal = myDataTable.Rows[0]["surfaceFieldValueChar"].ToString(); List unique = tmpVal.Split(',').Reverse().Distinct().ToList(); if (unique.Count > 0) { value = unique[0].Replace(",,,,", "").Replace(",,,,,", ""); } txtTextbox.Text = value; lbl.Text = value; lblToSort.Text = value; } else { txtTextbox.AddCssClass("noShow"); List unique = txtTextbox.Text.Split(',').Reverse().Distinct().ToList(); if (unique.Count > 0) { fieldData.surfaceFieldValueChar = unique[0].Replace(",,,,", "").Replace(",,,,,", ""); } else { fieldData.surfaceFieldValueChar = String.Empty; } lbl.Text = fieldData.surfaceFieldValueChar; lblToSort.Text = fieldData.surfaceFieldValueChar; } } break; #endregion #region Number case pNums.FieldType.Number: //number TextBox txtNumberBox = (TextBox)repeaterItem.FindControl(field.surfaceFieldName); if (txtNumberBox != null) { //txtNumberBox.Visible = editMode; if (editMode) { txtNumberBox.RemoveCssClass("noShow"); string Numvalue = string.Empty; if (myDataTable.Rows.Count > 0) Numvalue = myDataTable.Rows[0]["surfaceFieldValueNum"].ToString(); txtNumberBox.Text = Numvalue; lbl.Text = Numvalue; lblToSort.Text = Numvalue; } else { txtNumberBox.AddCssClass("noShow"); int valueNum = 0; List unique = txtNumberBox.Text.Split(',').Reverse().Distinct().ToList(); if (unique.Count > 0) { int.TryParse(unique[0].Replace(",,,,", "").Replace(",,,,,", ""), out valueNum); } fieldData.surfaceFieldValueNum = valueNum; lbl.Text = fieldData.surfaceFieldValueNum.ToString(); lblToSort.Text = fieldData.surfaceFieldValueNum.ToString(); } } break; #endregion #region Decimal case pNums.FieldType.Decimal: //decimal //CVH 2017-04-05 Show editable currency box in edit mode TextBox txtDecimalBox = (TextBox)repeaterItem.FindControl(field.surfaceFieldName); if (txtDecimalBox != null) { if (field.isCurrency && txtDecimalBox.Parent.GetType() == typeof(HtmlGenericControl)) { HtmlGenericControl decimalParent = (HtmlGenericControl)txtDecimalBox.Parent; HtmlGenericControl lblParent = (HtmlGenericControl)lbl.Parent; if (decimalParent != null && lblParent != null) { if (editMode) { decimalParent.Attributes.Remove("class"); decimalParent.Attributes.Add("class", "input-group"); lblParent.Attributes.Remove("class"); lblParent.Attributes.Add("class", "input-group noShow"); string tmpVal = string.Empty; string value = string.Empty; if (myDataTable.Rows.Count > 0) tmpVal = myDataTable.Rows[0]["surfaceFieldValueDecimal"].ToString(); List unique = tmpVal.Split(',').Reverse().Distinct().ToList(); if (unique.Count > 0) { value = unique[0].Replace(",,,,", "").Replace(",,,,,", ""); } //string Decimalvalue = string.Empty; //if (myDataTable.Rows.Count > 0) // Decimalvalue = myDataTable.Rows[0]["surfaceFieldValueDecimal"].ToString(); string Decimalvalue = value; txtDecimalBox.Text = Decimalvalue; lbl.Text = Decimalvalue; lblToSort.Text = Decimalvalue; } else { decimalParent.Attributes.Remove("class"); decimalParent.Attributes.Add("class", "input-group noShow"); lblParent.Attributes.Remove("class"); lblParent.Attributes.Add("class", "input-group"); string tempDec = String.Empty; List unique = txtDecimalBox.Text.Split(',').Reverse().Distinct().ToList(); if (unique.Count > 0) { tempDec = unique[0].Replace(",,,,", "").Replace(",,,,,", ""); } else { tempDec = String.Empty; } decimal valueDecimal = 0; decimal.TryParse(tempDec, out valueDecimal); fieldData.surfaceFieldValueDecimal = valueDecimal; lbl.Text = utils.returnFormattedDecimal(Convert.ToString(fieldData.surfaceFieldValueDecimal)); lblToSort.Text = utils.returnFormattedDecimal(Convert.ToString(fieldData.surfaceFieldValueDecimal)); } } } else { //txtDecimalBox.Visible = editMode; if (editMode) { txtDecimalBox.RemoveCssClass("noShow"); string Decimalvalue = string.Empty; if (myDataTable.Rows.Count > 0) Decimalvalue = myDataTable.Rows[0]["surfaceFieldValueDecimal"].ToString(); txtDecimalBox.Text = Decimalvalue; lbl.Text = Decimalvalue; lblToSort.Text = Decimalvalue; } else { txtDecimalBox.AddCssClass("noShow"); decimal valueDecimal = 0; decimal.TryParse(txtDecimalBox.Text, out valueDecimal); fieldData.surfaceFieldValueDecimal = valueDecimal; lbl.Text = utils.returnFormattedDecimal(Convert.ToString(fieldData.surfaceFieldValueDecimal)); lblToSort.Text = utils.returnFormattedDecimal(Convert.ToString(fieldData.surfaceFieldValueDecimal)); } } } break; #endregion #region Picklist case pNums.FieldType.Picklist: //picklist //CVH 2017-04-05 Enable wants reason on grid HtmlGenericControl ddlParent = (HtmlGenericControl)repeaterItem.FindControl("div" + field.surfaceFieldName); DropDownList ddl = (DropDownList)repeaterItem.FindControl(field.surfaceFieldName); TextBox txtddlReason = (TextBox)repeaterItem.FindControl("reason" + field.surfaceFieldName); TextBox txtSelectedDdl = (TextBox)repeaterItem.FindControl("sel" + field.surfaceFieldName); if (ddl != null && ddlParent != null && txtSelectedDdl != null) { if (editMode) { string tmpValDdl = string.Empty; string lookvalueDdl = string.Empty; if (myDataTable.Rows.Count > 0) tmpValDdl = myDataTable.Rows[0]["surfaceFieldLookupID"].ToString(); List uniqueDdl = tmpValDdl.Split(',').Reverse().Distinct().ToList(); if (uniqueDdl.Count > 0) { lookvalueDdl = uniqueDdl[0].Replace(",,,,", "").Replace(",,,,,", ""); } if (ddl.Items.FindByValue(lookvalueDdl) != null) { ddl.ClearSelection(); ddl.Items.FindByValue(lookvalueDdl).Selected = true; if (txtddlReason != null) { if (fieldData.surfaceFieldValueChar != String.Empty) { string tmpReason = fieldData.surfaceFieldValueChar; string reason = string.Empty; List uniqueReason = tmpReason.Split(',').Reverse().Distinct().ToList(); if (uniqueReason.Count > 0) { reason = uniqueReason[0].Replace(",,,,", "").Replace(",,,,,", ""); } txtddlReason.Enabled = true; txtddlReason.Text = reason; } else { txtddlReason.Enabled = false; txtddlReason.Text = String.Empty; } } } ddlParent.Attributes.Remove("class"); } else { ddlParent.Attributes.Add("class", "noShow"); int lookupId = 0; int.TryParse(ddl.SelectedValue, out lookupId); //CVH 2017-04-10 If the "selected" lookupId is the same as the saved lookupId, rather use value in hidden label. The selected value is not accurate. if (lookupId <= 0 || lookupId == fieldData.surfaceFieldLookupID) { string tempLook = String.Empty; List unique = txtSelectedDdl.Text.Split(',').Reverse().Distinct().ToList(); if (unique.Count > 0) { tempLook = unique[0].Replace(",,,,", "").Replace(",,,,,", ""); } else { tempLook = String.Empty; } int.TryParse(tempLook, out lookupId); } if (lookupId > 0) { fieldData.surfaceFieldLookupID = lookupId; if (txtddlReason != null && txtddlReason.Text != String.Empty) { List uniqueReason = txtddlReason.Text.Split(',').Reverse().Distinct().ToList(); if (uniqueReason.Count > 0) { fieldData.surfaceFieldValueChar = uniqueReason[0].Replace(",,,,", "").Replace(",,,,,", ""); } else { fieldData.surfaceFieldValueChar = String.Empty; } lbl.Text = txtddlReason.Text; lblToSort.Text = txtddlReason.Text; } else { lbl.Text = (ddl.Items.FindByValue(lookupId.ToString()) != null ? ddl.Items.FindByValue(lookupId.ToString()).Text : String.Empty); lblToSort.Text = (ddl.Items.FindByValue(lookupId.ToString()) != null ? ddl.Items.FindByValue(lookupId.ToString()).Text : String.Empty); fieldData.surfaceFieldValueChar = String.Empty; } } else { fieldData.surfaceFieldLookupID = 0; lbl.Text = String.Empty; lblToSort.Text = String.Empty; fieldData.surfaceFieldValueChar = String.Empty; } } } break; #endregion #region MultiPicklist case pNums.FieldType.MultiPicklist: ListBox listBox = (ListBox)repeaterItem.FindControl(field.surfaceFieldName); if (listBox != null) { //only setting listbox value, don't think we need to set labels too, it's already bound on repeater if (editMode) { string selectedItem = lbl.Text; listBox.ClearSelection(); foreach (string item in selectedItem.Split(';')) { foreach (ListItem lst in listBox.Items) { if (lst.Text.Trim() == item.Trim()) lst.Selected = true; } } //listBox.RemoveCssClass("noShow"); listBox.Visible = true; } else { //listBox.AddCssClass("noShow"); listBox.Visible = false; } } break; #endregion #region Date case pNums.FieldType.Date: //date HtmlGenericControl dvdt = (HtmlGenericControl)repeaterItem.FindControl("dvdt" + field.surfaceFieldName); TextBox txtDate = (TextBox)repeaterItem.FindControl(field.surfaceFieldName); if (txtDate != null) { string format = ""; if (field.surfaceDateTypeId == pNums.SurfaceDateType.Year.GetHashCode()) { format = "yyyy"; } else if (field.surfaceDateTypeId == pNums.SurfaceDateType.MonthYear.GetHashCode()) { format = "MMMM yyyy"; } else { format = "dd/MM/yyyy"; } //txtDate.Visible = editMode; if (editMode) { dvdt.Attributes.Remove("class"); dvdt.Attributes.Add("class", "input-group date "); txtDate.RemoveCssClass("noShow"); ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "myGridDatePicker", "SetDatePicker();", true); string datevalue = string.Empty; if (field.defaultToCurrent) datevalue = DateTime.Now.ToString(format); else if (field.defaultValue != "") datevalue = field.defaultValue; else datevalue = ""; if (myDataTable.Rows.Count > 0 && myDataTable.Rows[0]["surfaceFieldValueDate"].ToString() != String.Empty) datevalue = Convert.ToDateTime(myDataTable.Rows[0]["surfaceFieldValueDate"].ToString()).ToString(format); txtDate.Text = datevalue; lbl.Text = datevalue; lblToSort.Text = datevalue; } else { dvdt.Attributes.Remove("class"); dvdt.Attributes.Add("class", "input-group date noShow"); txtDate.AddCssClass("noShow"); if (txtDate.Text != String.Empty) { List unique = txtDate.Text.Split(',').Reverse().Distinct().ToList(); if (unique.Count > 0) { if (field.surfaceDateTypeId == pNums.SurfaceDateType.Year.GetHashCode()) fieldData.surfaceFieldValueDate = utils.formatStringToDate(unique[0].Replace(",,,,", "").Replace(",,,,,", "") + "/01/01"); else fieldData.surfaceFieldValueDate = utils.formatStringToDate(unique[0].Replace(",,,,", "").Replace(",,,,,", "")); } lbl.Text = fieldData.surfaceFieldValueDate.ToString(format); lblToSort.Text = fieldData.surfaceFieldValueDate.ToString(format); } } } //TextBox txtDate = (TextBox)repeaterItem.FindControl(field.surfaceFieldName); //if (txtDate != null) //{ // //txtDate.Visible = editMode; // if (editMode) // { // txtDate.RemoveCssClass("noShow"); // string format = ""; // if (field.surfaceDateTypeId == pNums.SurfaceDateType.Year.GetHashCode()) // { format = "yyyy"; } // else if (field.surfaceDateTypeId == pNums.SurfaceDateType.Year.GetHashCode()) // { format = "MM yyyy"; } // else // { format = "dd/MM/yyyy"; } // string datevalue = string.Empty; // if (myDataTable.Rows.Count > 0) // datevalue = Convert.ToDateTime(myDataTable.Rows[0]["surfaceFieldValueDate"].ToString()).ToString(format); // txtDate.Text = datevalue; // lbl.Text = datevalue; // lblToSort.Text = datevalue; // } // else // { // txtDate.AddCssClass("noShow"); // if (txtDate.Text != String.Empty) // { // List unique = txtDate.Text.Split(',').Reverse().Distinct().ToList(); // if (unique.Count > 0) // { // fieldData.surfaceFieldValueDate = utils.formatStringToDate(unique[0].Replace(",,,,", "").Replace(",,,,,", "")); // } // lbl.Text = fieldData.surfaceFieldValueDate.ToString("dd/MM/yyyy"); // lblToSort.Text = fieldData.surfaceFieldValueDate.ToString("dd/MM/yyyy"); // } // } //} break; #endregion #region Checkbox case pNums.FieldType.Checkbox: //checkbox if (repeaterItem.FindControl(field.surfaceFieldName).GetType().Name == "CheckBox") { CheckBox chkBox = (CheckBox)repeaterItem.FindControl(field.surfaceFieldName); //CVH 2016-11-10 No edit label for field type checkbox has been changed to a read only checkbox CheckBox lblchk = (CheckBox)repeaterItem.FindControl("lblchk" + field.surfaceFieldName); if (chkBox != null && lblchk != null) { chkBox.Visible = editMode; if (editMode) { lblchk.AddCssClass("noShow"); chkBox.RemoveCssClass("noShow"); bool boolvalue = false; if (myDataTable.Rows.Count > 0) boolvalue = Convert.ToBoolean(myDataTable.Rows[0]["surfaceFieldValueBool"].ToString()); chkBox.Checked = boolvalue; lblchk.Checked = boolvalue; if (boolvalue == true) lblToSort.Text = "Yes"; else lblToSort.Text = "No"; } else { lblchk.RemoveCssClass("noShow"); chkBox.AddCssClass("noShow"); fieldData.surfaceFieldValueBool = chkBox.Checked; lblchk.Checked = chkBox.Checked; if (fieldData.surfaceFieldValueBool == true) lblToSort.Text = "Yes"; else lblToSort.Text = "No"; } } } else if (repeaterItem.FindControl(field.surfaceFieldName).GetType().Name == "HtmlInputCheckBox") { HtmlInputCheckBox chkBox = (HtmlInputCheckBox)repeaterItem.FindControl(field.surfaceFieldName); //CVH 2016-11-10 No edit label for field type checkbox has been changed to a read only checkbox HtmlInputCheckBox lblchk = (HtmlInputCheckBox)repeaterItem.FindControl("lblchk" + field.surfaceFieldName); if (chkBox != null && lblchk != null) { chkBox.Visible = editMode; if (editMode) { lblchk.Attributes.Add("class", "noShow"); chkBox.Attributes.Remove("class"); bool boolvalue = false; if (myDataTable.Rows.Count > 0) boolvalue = Convert.ToBoolean(myDataTable.Rows[0]["surfaceFieldValueBool"].ToString()); chkBox.Checked = boolvalue; lblchk.Checked = boolvalue; if (boolvalue == true) lblToSort.Text = "Yes"; else lblToSort.Text = "No"; } else { lblchk.Attributes.Remove("class"); chkBox.Attributes.Add("class", "noShow"); fieldData.surfaceFieldValueBool = chkBox.Checked; lblchk.Checked = chkBox.Checked; if (fieldData.surfaceFieldValueBool == true) lblToSort.Text = "Yes"; else lblToSort.Text = "No"; } } } break; #endregion #region Grid case pNums.FieldType.Grid: //grid //no action - no data is saved in grid field type break; #endregion #region Placeholder /* CVH 2016-01-26 Add field type placeholder */ case pNums.FieldType.Placeholder: //no action break; #endregion #region Caption //JasR 2016-01-27 Caption case pNums.FieldType.Caption: TextBox txtCaption = (TextBox)repeaterItem.FindControl(field.surfaceFieldName); if (txtCaption != null) { //txtTextbox.Visible = editMode; if (editMode) { txtCaption.RemoveCssClass("noShow"); txtCaption.Enabled = !field.isReadOnly; string tmpVal = string.Empty; string value = string.Empty; if (myDataTable.Rows.Count > 0) tmpVal = myDataTable.Rows[0]["surfaceFieldValueChar"].ToString(); List unique = tmpVal.Split(',').Reverse().Distinct().ToList(); if (unique.Count > 0) { value = unique[0].Replace(",,,,", "").Replace(",,,,,", ""); } txtCaption.Text = value; lbl.Text = value; lblToSort.Text = value; } else { txtCaption.AddCssClass("noShow"); List unique = txtCaption.Text.Split(',').Reverse().Distinct().ToList(); if (unique.Count > 0) { fieldData.surfaceFieldValueChar = unique[0].Replace(",,,,", "").Replace(",,,,,", ""); } else { fieldData.surfaceFieldValueChar = String.Empty; } lbl.Text = fieldData.surfaceFieldValueChar; lblToSort.Text = fieldData.surfaceFieldValueChar; } //HtmlTextArea textArea = (HtmlTextArea)repeaterItem.FindControl(field.surfaceFieldName); //if (textArea != null) //{ // //textArea.Visible = editMode; // if (editMode) // { // textArea.Attributes["class"] = textArea.Attributes["class"].Replace("noShow", ""); // string value = string.Empty; // if (myDataTable.Rows.Count > 0) // value = myDataTable.Rows[0]["surfaceFieldValueChar"].ToString(); // textArea.Value = value; // lbl.Text = value; // lblToSort.Text = value; // } // else // { // textArea.Attributes.Add("class", "noShow"); // fieldData.surfaceFieldValueChar = textArea.Value; // lbl.Text = fieldData.surfaceFieldValueChar; // lblToSort.Text = fieldData.surfaceFieldValueChar; // } //} } break; #endregion #region RadioButtonList case pNums.FieldType.RadioButtonList: //radiobuttonlist //CVH 2017-04-05 Enable radiobuttonlist on grid, built as dropdown HtmlGenericControl rblParent = (HtmlGenericControl)repeaterItem.FindControl("div" + field.surfaceFieldName); DropDownList rblddl = (DropDownList)repeaterItem.FindControl(field.surfaceFieldName); TextBox txtReason = (TextBox)repeaterItem.FindControl("reason" + field.surfaceFieldName); TextBox txtSelected = (TextBox)repeaterItem.FindControl("sel" + field.surfaceFieldName); if (rblddl != null && rblParent != null && txtSelected != null) { if (editMode) { string tmpVal = string.Empty; string lookvalue = string.Empty; if (myDataTable.Rows.Count > 0) tmpVal = myDataTable.Rows[0]["surfaceFieldLookupID"].ToString(); List unique = tmpVal.Split(',').Reverse().Distinct().ToList(); if (unique.Count > 0) { lookvalue = unique[0].Replace(",,,,", "").Replace(",,,,,", ""); } if (rblddl.Items.FindByValue(lookvalue) != null) { rblddl.ClearSelection(); rblddl.Items.FindByValue(lookvalue).Selected = true; if (txtReason != null) { if (fieldData.surfaceFieldValueChar != String.Empty) { string tmpReason = fieldData.surfaceFieldValueChar; string reason = string.Empty; List uniqueReason = tmpReason.Split(',').Reverse().Distinct().ToList(); if (uniqueReason.Count > 0) { reason = uniqueReason[0].Replace(",,,,", "").Replace(",,,,,", ""); } txtReason.Enabled = true; txtReason.Text = reason; } else { txtReason.Enabled = false; txtReason.Text = String.Empty; } } } txtSelected.Text = lookvalue; rblParent.Attributes.Remove("class"); } else { rblParent.Attributes.Add("class", "noShow"); int lookupId = 0; int.TryParse(rblddl.SelectedValue, out lookupId); //CVH 2017-04-10 If the "selected" lookupId is the same as the saved lookupId, rather use value in hidden label. The selected value is not accurate. if (lookupId <= 0 || lookupId == fieldData.surfaceFieldLookupID) { string tempLook = String.Empty; List unique = txtSelected.Text.Split(',').Reverse().Distinct().ToList(); if (unique.Count > 0) { tempLook = unique[0].Replace(",,,,", "").Replace(",,,,,", ""); } else { tempLook = String.Empty; } int.TryParse(tempLook, out lookupId); } if (lookupId > 0) { fieldData.surfaceFieldLookupID = lookupId; if (txtReason != null && txtReason.Text != String.Empty) { List uniqueReason = txtReason.Text.Split(',').Reverse().Distinct().ToList(); if (uniqueReason.Count > 0) { fieldData.surfaceFieldValueChar = uniqueReason[0].Replace(",,,,", "").Replace(",,,,,", ""); } else { fieldData.surfaceFieldValueChar = String.Empty; } lbl.Text = fieldData.surfaceFieldValueChar; lblToSort.Text = fieldData.surfaceFieldValueChar; } else { lbl.Text = (rblddl.Items.FindByValue(lookupId.ToString()) != null ? rblddl.Items.FindByValue(lookupId.ToString()).Text : String.Empty); lblToSort.Text = (rblddl.Items.FindByValue(lookupId.ToString()) != null ? rblddl.Items.FindByValue(lookupId.ToString()).Text : String.Empty); fieldData.surfaceFieldValueChar = String.Empty; } } else { fieldData.surfaceFieldLookupID = 0; lbl.Text = String.Empty; lblToSort.Text = String.Empty; fieldData.surfaceFieldValueChar = String.Empty; } } } break; #endregion } } surfaceData.Add(fieldData); break; } } } catch (Exception ex) { exception.HandleException("surface:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } } /// /// Save for Grid Edit Type = Batch /// /// /// AUTHOR: Charlene van Heerden /// DATE WRITTEN: 2 February 2016 /// private void SaveSurfaceGrid(Repeater rptEdit, int surfaceId, int parentSurfaceItemId = 0) { try { ArrayList surfaceFields = xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceField), "surfaceId", surfaceId.ToString(), "sequence"); //change edit + delete column headings HtmlTableCell thEdit = (HtmlTableCell)rptEdit.Controls[0].Controls[0].FindControl("thEdit"); HtmlTableCell thDelete = (HtmlTableCell)rptEdit.Controls[0].Controls[0].FindControl("thDelete"); if (thEdit != null) thEdit.InnerText = "Edit"; if (thDelete != null) thDelete.InnerText = "Delete"; int currentParentSurfaceItemId = 0; int userId = 0; if (utils.verifySession("user")) userId = ((oUser)Session["user"]).recId; foreach (RepeaterItem repeaterItem in rptEdit.Items) { if (repeaterItem.ItemIndex == 0) { //CVH 2017-03-21 Check for null & check if child surface - linked surface batch edit if (repeaterItem.FindControl("hfParentSurfaceItemId") != null && base.IsChildSurface) { HiddenField hfParentSurfaceItemId = (HiddenField)repeaterItem.FindControl("hfParentSurfaceItemId"); if (hfParentSurfaceItemId.Value != "") currentParentSurfaceItemId = Convert.ToInt32(hfParentSurfaceItemId.Value); } } LinkButton lnkEdit = null, lnkSaveRow = null, lnkRemove = null, lnkCancel = null, lnkView = null; lnkEdit = (LinkButton)repeaterItem.FindControl("lnkEdit"); lnkSaveRow = (LinkButton)repeaterItem.FindControl("lnkSaveRow"); lnkRemove = (LinkButton)repeaterItem.FindControl("lnkRemove"); lnkCancel = (LinkButton)repeaterItem.FindControl("lnkCancel"); lnkView = (LinkButton)repeaterItem.FindControl("lnkView"); if (lnkEdit == null) continue; int itemId = int.Parse(lnkEdit.CommandArgument); //CVH 2017-03-21 Only when child surface if (currentParentSurfaceItemId == 0 && base.IsChildSurface) { //create new item oSurfaceItem childItem = new oSurfaceItem(); childItem.createdBy = userId; childItem.dateCreated = DateTime.Now; childItem.isActive = true; childItem.isDeleted = false; childItem.isWizardCompleted = false; childItem.lastTabCompleted = 0; childItem.surfaceId = surfaceId; itemId = xData.SaveTyped("recId", typeof(oSurfaceItem), childItem); } if (lnkEdit != null) lnkEdit.RemoveCssClass("noShow"); if (lnkSaveRow != null) lnkSaveRow.AddCssClass("noShow"); if (lnkRemove != null) lnkRemove.RemoveCssClass("noShow"); if (lnkCancel != null) lnkCancel.AddCssClass("noShow"); if (lnkView != null) lnkView.RemoveCssClass("noShow"); //CVH 2017-02-07 Determine Divide Action to be used in formula field oSurfaceAction divideAction = new oSurfaceAction(); oSurfaceAction lookupAction = new oSurfaceAction(); oSurfaceAction aggrSumAction = new oSurfaceAction(); foreach (oSurfaceAction act in xData.GetTypedCollection("recId", typeof(oSurfaceAction))) { if (act.actionType == (int)pNums.ActionType.Calculation) { if (act.action == "Divide") divideAction = act; else if (act.action == "Lookup") lookupAction = act; } else if (act.actionType == (int)pNums.ActionType.Aggregation) { if (act.action == "Sum") aggrSumAction = act; } } ArrayList fieldDataListNew = new ArrayList(); ArrayList fieldDataListUpdate = new ArrayList(); foreach (oSurfaceField field in surfaceFields) { if ((field.isGrid && field.isActive && field.surfaceFieldTypeId != (int)pNums.FieldType.Tab && field.surfaceFieldTypeId != (int)pNums.FieldType.Group && field.surfaceFieldTypeId != (int)pNums.FieldType.HeaderGroup && field.surfaceFieldTypeId != (int)pNums.FieldType.Attachment && field.surfaceFieldTypeId != (int)pNums.FieldType.Button && field.surfaceFieldTypeId != (int)pNums.FieldType.Composite && field.surfaceFieldTypeId != (int)pNums.FieldType.Content && field.surfaceFieldTypeId != (int)pNums.FieldType.Control && field.surfaceFieldTypeId != (int)pNums.FieldType.Debtors && //field.surfaceFieldTypeId != (int)pNums.FieldType.FormulaField && field.surfaceFieldTypeId != (int)pNums.FieldType.Grid && field.surfaceFieldTypeId != (int)pNums.FieldType.Label && field.surfaceFieldTypeId != (int)pNums.FieldType.Mediswitch && field.surfaceFieldTypeId != (int)pNums.FieldType.Note && field.surfaceFieldTypeId != (int)pNums.FieldType.Placeholder && field.surfaceFieldTypeId != (int)pNums.FieldType.RelationalField && field.surfaceFieldTypeId != (int)pNums.FieldType.Sales) || field.surfaceFieldName == "ParentSurfaceItemId" ) { oSurfaceFieldData fieldData; //CVH 2017-03-21 Only when child surface if (currentParentSurfaceItemId == 0 && base.IsChildSurface) { fieldData = new oSurfaceFieldData(); fieldData.surfaceId = surfaceId; fieldData.surfaceFieldID = field.recId; fieldData.surfaceItemId = itemId; } else { //get surface field data item to update, based on surfaceItemId and surfaceFieldId ArrayList dataList = xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceFieldData), "surfaceId,surfaceItemId,surfaceFieldID", surfaceId + "," + itemId + "," + field.recId); if (dataList == null || dataList.Count <= 0) continue; fieldData = (oSurfaceFieldData)dataList[0]; } Label lblToSort = (Label)repeaterItem.FindControl("lblToSort" + field.surfaceFieldName); Label lbl = (Label)repeaterItem.FindControl("lbl" + field.surfaceFieldName); pNums.FieldType typ = (pNums.FieldType)Enum.ToObject(typeof(pNums.FieldType), field.surfaceFieldTypeId); if (lbl != null) { lbl.RemoveCssClass("noShow"); } switch (typ) { #region Text case pNums.FieldType.Text://Textbox TextBox txtTextbox = (TextBox)repeaterItem.FindControl(field.surfaceFieldName); if (txtTextbox != null) { txtTextbox.AddCssClass("noShow"); fieldData.surfaceFieldValueChar = txtTextbox.Text; lbl.Text = fieldData.surfaceFieldValueChar; lblToSort.Text = fieldData.surfaceFieldValueChar; } break; #endregion #region Number case pNums.FieldType.Number: //number if (field.surfaceFieldName == "ParentSurfaceItemId") { fieldData.surfaceFieldValueNum = parentSurfaceItemId; } else { TextBox txtNumberBox = (TextBox)repeaterItem.FindControl(field.surfaceFieldName); if (txtNumberBox != null) { txtNumberBox.AddCssClass("noShow"); int valueNum = 0; int.TryParse(txtNumberBox.Text, out valueNum); fieldData.surfaceFieldValueNum = valueNum; lbl.Text = fieldData.surfaceFieldValueNum.ToString(); lblToSort.Text = fieldData.surfaceFieldValueNum.ToString(); } } break; #endregion #region Decimal case pNums.FieldType.Decimal: //decimal TextBox txtDecimalBox = (TextBox)repeaterItem.FindControl(field.surfaceFieldName); if (txtDecimalBox != null) { txtDecimalBox.AddCssClass("noShow"); decimal valueDecimal = 0; decimal.TryParse(txtDecimalBox.Text, out valueDecimal); fieldData.surfaceFieldValueDecimal = valueDecimal; lbl.Text = utils.returnFormattedDecimal(Convert.ToString(fieldData.surfaceFieldValueDecimal)); lblToSort.Text = utils.returnFormattedDecimal(Convert.ToString(fieldData.surfaceFieldValueDecimal)); } break; #endregion #region Picklist case pNums.FieldType.Picklist: //picklist DropDownList ddDropdownlist = (DropDownList)repeaterItem.FindControl(field.surfaceFieldName); if (ddDropdownlist != null) { ddDropdownlist.AddCssClass("noShow"); int lookupId = 0; int.TryParse(ddDropdownlist.SelectedValue, out lookupId); fieldData.surfaceFieldLookupID = lookupId; lbl.Text = ddDropdownlist.SelectedItem.Text; lblToSort.Text = ddDropdownlist.SelectedItem.Text; } break; #endregion #region MultiPicklist case pNums.FieldType.MultiPicklist: //multi picklist ListBox listBox = (ListBox)repeaterItem.FindControl(field.surfaceFieldName); if (listBox != null) { string lbSelectedValues = string.Empty; string lbSelectedText = string.Empty; foreach (ListItem item in listBox.Items) { if (item.Selected) { if (lbSelectedValues == String.Empty) { lbSelectedValues = item.Value.ToString(); lbSelectedText = item.Text.ToString(); } else { lbSelectedValues += "," + item.Value; lbSelectedText += "; " + item.Text.ToString(); } } } //listBox.AddCssClass("noShow"); listBox.Visible = false; fieldData.surfaceFieldValueChar = lbSelectedValues; lbl.Text = lbSelectedText; lblToSort.Text = lbSelectedText; } break; #endregion #region Date case pNums.FieldType.Date: //date TextBox txtDate = (TextBox)repeaterItem.FindControl(field.surfaceFieldName); if (txtDate != null) { txtDate.AddCssClass("noShow"); if (txtDate.Text != String.Empty) { if (field.surfaceDateTypeId == (int)pNums.SurfaceDateType.Year) fieldData.surfaceFieldValueDate = utils.formatStringToDate(txtDate.Text + "/01/01"); else fieldData.surfaceFieldValueDate = utils.formatStringToDate(txtDate.Text); lbl.Text = fieldData.surfaceFieldValueDate.ToString("dd/MM/yyyy"); lblToSort.Text = fieldData.surfaceFieldValueDate.ToString("dd/MM/yyyy"); } } break; #endregion #region Checkbox case pNums.FieldType.Checkbox: //checkbox if (repeaterItem.FindControl(field.surfaceFieldName).GetType().Name == "CheckBox") { CheckBox chkBox = (CheckBox)repeaterItem.FindControl(field.surfaceFieldName); //CVH 2016-11-10 No edit label for field type checkbox has been changed to a read only checkbox CheckBox lblchk = (CheckBox)repeaterItem.FindControl("lblchk" + field.surfaceFieldName); if (chkBox != null && lblchk != null) { chkBox.AddCssClass("noShow"); lblchk.RemoveCssClass("noShow"); fieldData.surfaceFieldValueBool = chkBox.Checked; lblchk.Checked = chkBox.Checked; if (fieldData.surfaceFieldValueBool == true) lblToSort.Text = "Yes"; else lblToSort.Text = "No"; } } else if (repeaterItem.FindControl(field.surfaceFieldName).GetType().Name == "HtmlInputCheckBox") { HtmlInputCheckBox chkBox = (HtmlInputCheckBox)repeaterItem.FindControl(field.surfaceFieldName); //CVH 2016-11-10 No edit label for field type checkbox has been changed to a read only checkbox HtmlInputCheckBox lblchk = (HtmlInputCheckBox)repeaterItem.FindControl("lblchk" + field.surfaceFieldName); if (chkBox != null && lblchk != null) { chkBox.Attributes.Add("class", "noShow"); lblchk.Attributes.Remove("class"); fieldData.surfaceFieldValueBool = chkBox.Checked; lblchk.Checked = chkBox.Checked; if (fieldData.surfaceFieldValueBool == true) lblToSort.Text = "Yes"; else lblToSort.Text = "No"; } } break; #endregion #region Caption case pNums.FieldType.Caption: TextBox txtCaption = (TextBox)repeaterItem.FindControl(field.surfaceFieldName); if (txtCaption != null) { txtCaption.AddCssClass("noShow"); fieldData.surfaceFieldValueChar = txtCaption.Text; lbl.Text = fieldData.surfaceFieldValueChar; lblToSort.Text = fieldData.surfaceFieldValueChar; } //HtmlTextArea textArea = (HtmlTextArea)repeaterItem.FindControl(field.surfaceFieldName); //if (textArea != null) //{ // textArea.Attributes.Add("class", "noShow"); // fieldData.surfaceFieldValueChar = textArea.Value; // lbl.Text = fieldData.surfaceFieldValueChar; // lblToSort.Text = fieldData.surfaceFieldValueChar; //} break; #endregion #region FormulaField case pNums.FieldType.FormulaField: fieldData.surfaceFieldValueChar = ""; TextBox txtFieldBox = (TextBox)repeaterItem.FindControl(field.surfaceFieldName); if (txtFieldBox != null) { //CVH 2017-02-07 Divide Calculation Formula need to calculate and save it on form save if (field.actionType == (int)pNums.ActionType.Calculation && field.action == divideAction.recId) { decimal? source1 = null; decimal? source2 = null; //if first source field is decimal, format it as a decimal, otherwise format as int bool divDecimal = false; //need to do calculation based on two source fields foreach (oSurfaceField sourceField in surfaceFields) { int src2FieldId = 0; int.TryParse(field.actionValue, out src2FieldId); decimal divideTemp = 0; if (sourceField.recId == field.actionSource) { switch ((pNums.FieldType)Enum.ToObject(typeof(pNums.FieldType), sourceField.surfaceFieldTypeId)) { case pNums.FieldType.Text: TextBox txtDivideTextbox = (TextBox)repeaterItem.FindControl(sourceField.surfaceFieldName); if (txtDivideTextbox != null) { if (decimal.TryParse(txtDivideTextbox.Text, out divideTemp)) source1 = divideTemp; } break; case pNums.FieldType.Number: case pNums.FieldType.Decimal: TextBox txtDivideBox = (TextBox)repeaterItem.FindControl(sourceField.surfaceFieldName); if (txtDivideBox != null) { if (decimal.TryParse(txtDivideBox.Text, out divideTemp)) source1 = divideTemp; } break; } if (sourceField.surfaceFieldTypeId == (int)pNums.FieldType.Decimal) divDecimal = true; } else if (src2FieldId > 0 && sourceField.recId == src2FieldId) { switch ((pNums.FieldType)Enum.ToObject(typeof(pNums.FieldType), sourceField.surfaceFieldTypeId)) { case pNums.FieldType.Text: TextBox txtDivideTextbox = (TextBox)repeaterItem.FindControl(sourceField.surfaceFieldName); if (txtDivideTextbox != null) { if (decimal.TryParse(txtDivideTextbox.Text, out divideTemp)) source2 = divideTemp; } break; case pNums.FieldType.Number: case pNums.FieldType.Decimal: TextBox txtDivideBox = (TextBox)repeaterItem.FindControl(sourceField.surfaceFieldName); if (txtDivideBox != null) { if (decimal.TryParse(txtDivideBox.Text, out divideTemp)) source2 = divideTemp; } break; } } } if (source1 != null && source2 != null && source2 != 0) { if (divDecimal) fieldData.surfaceFieldValueChar = utils.returnFormattedDecimal((source1 / source2).ToString()); else fieldData.surfaceFieldValueChar = Decimal.Round((source1.Value / source2.Value), 0).ToString(); } else { fieldData.surfaceFieldValueChar = ""; } } //CVH 2017-02-13 Lookup Calculation Formula else if (field.actionType == (int)pNums.ActionType.Calculation && field.action == lookupAction.recId) { decimal sourceValue = 0m; bool conversionSuccess = false; //get source field foreach (oSurfaceField srcField in surfaceFields) { if (srcField.recId == field.actionSource) { TextBox txtSrc = (TextBox)repeaterItem.FindControl(srcField.surfaceFieldName); if (txtSrc != null) { conversionSuccess = decimal.TryParse(txtSrc.Text, out sourceValue); } break; } } if (conversionSuccess) { fieldData.surfaceFieldValueChar = CalculateLookup(field, sourceValue); } } //CVH 2017-02-24 New action type Aggregation Sum else if (field.actionType == (int)pNums.ActionType.Aggregation && field.action == aggrSumAction.recId) { int actionSurfaceId = 0; if (int.TryParse(field.actionValue, out actionSurfaceId)) fieldData.surfaceFieldValueDecimal = xData.GetSurfaceAggregationSum(actionSurfaceId, field.actionSource, itemId); } else { decimal valueDecimal = 0; if (decimal.TryParse(txtFieldBox.Text, out valueDecimal)) { fieldData.surfaceFieldValueDecimal = valueDecimal; } else //assume textbox { fieldData.surfaceFieldValueChar = txtFieldBox.Text; } if (field.actionType == (int)pNums.ActionType.GenerateCode) { Session["surfaceCodeUsed"] = txtFieldBox.Text; } } } break; #endregion } if (fieldData.recId == 0) { fieldDataListNew.Add(fieldData); //xData.SaveTyped("recId", typeof(oSurfaceFieldData), fieldData); } else { fieldDataListUpdate.Add(fieldData); //xData.UpdateTyped("recId", fieldData.recId.ToString(), typeof(oSurfaceFieldData), fieldData); } } } if (fieldDataListNew.Count > 0) xData.SaveTypedCollection("recId", typeof(oSurfaceFieldData), fieldDataListNew); if (fieldDataListUpdate.Count > 0) xData.UpdateTypedCollection("recId", typeof(oSurfaceFieldData), fieldDataListUpdate); //save to query table xData.SaveSurfaceItemToQueryTable(surfaceId, itemId, true); } } catch (Exception ex) { exception.HandleException("surface:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } } /// /// Edit The Surface /// /// private void EditSurface(int itemId, RepeaterItem rptItem) { try { foreach (oSurfaceItem item in xData.GetTypedByCriteriaSpecific("rcId", typeof(oSurfaceItem), "recId", itemId.ToString())) { base.SurfaceAppItem = item; base.SurfaceAppItemId = item.recId; base.ActiveTabPanel = String.Empty; pNums.SurfaceGridEditType editType = (pNums.SurfaceGridEditType)Enum.ToObject(typeof(pNums.SurfaceGridEditType), base.SurfaceAppGridEditTypeId); oSurfaceControlParcel parcel = new oSurfaceControlParcel(); if (base.SurfaceApp.isPublished) { parcel.SurfaceApp = base.SurfaceApp; parcel.SurfaceAppItem = item; Session["SurfaceControlParcel"] = parcel; Response.Redirect(Request.Url.AbsoluteUri.Split('?')[0] + "?mode=form", false); } else { switch (editType) { case pNums.SurfaceGridEditType.Form: //Go to form parcel.SurfaceApp = base.SurfaceApp; parcel.SurfaceAppItem = item; Session["SurfaceControlParcel"] = parcel; Response.Redirect(Request.Url.AbsoluteUri.Split('?')[0] + "?mode=form", false); break; case pNums.SurfaceGridEditType.Row: if (rptItem != null) { ToggleRowEdit(itemId, item, true, rptItem); if (rptItem.Parent.GetType() == typeof(Repeater)) { KeepSelectedGridTab((Repeater)rptItem.Parent); } } break; /* CVH 2016-02-02 Batch edit mode */ case pNums.SurfaceGridEditType.Batch: if (rptItem != null) { ToggleGridEdit(true, (Repeater)rptItem.Parent, itemId, item.surfaceId); } break; default: //Go to form parcel.SurfaceApp = base.SurfaceApp; parcel.SurfaceAppItem = item; Session["SurfaceControlParcel"] = parcel; Response.Redirect(Request.Url.AbsoluteUri.Split('?')[0] + "?mode=form", false); break; } } break; } } catch (Exception ex) { exception.HandleException("surface:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } } /// /// Method to Save Row /// /// /// private void SaveSurfaceRow(ref oSurfaceItem _surfaceItem, ref ArrayList surfaceData, RepeaterItem rptItem) { try { //first fetch the field and data records ArrayList surfaceFields = xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceField), "surfaceId,isActive", _surfaceItem.surfaceId + ",1", "sequence"); LinkButton lnkEdit = (LinkButton)rptItem.FindControl("lnkEdit"); LinkButton lnkSaveRow = (LinkButton)rptItem.FindControl("lnkSaveRow"); if (int.Parse((lnkEdit).CommandArgument) == _surfaceItem.recId) { SetRowMode(rptItem, _surfaceItem, false, ref surfaceData); } } catch (Exception ex) { exception.HandleException("surface:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } } /// /// Perform Bulk Update /// /// /// /// private bool PerformBulkUpdate(oSurfaceItem item, ArrayList bulkFields) { bool result = false; try { oUser user = handler.ReturnUser(); item.dateUpdated = DateTime.Now; item.updatedBy = user.recId; item.isActive = true; item.isDeleted = false; ArrayList surfaceDataList = new ArrayList(); if (SaveBulkUpdate(item, bulkFields, ref surfaceDataList)) { if (xData.UpdateTyped("recId", item.recId.ToString(), typeof(oSurfaceItem), item)) { xData.UpdateTypedCollection("recId", typeof(oSurfaceFieldData), surfaceDataList); //save to query table xData.SaveSurfaceItemToQueryTable(item.surfaceId, item.recId, true); result = true; string fieldName = ""; foreach (oSurfaceField field in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceField), "surfaceId,surfaceFieldTypeId,isActive", base.SurfaceApp.recId + "," + pNums.FieldType.Note.GetHashCode() + ",1")) { fieldName = field.surfaceFieldName; break; } oNote note = new oNote(); note.moduleId = pNums.Module.Surface.GetHashCode(); note.typeId = pNums.NoteType.SurfaceItemChanged.GetHashCode(); note.entityId = item.recId; note.title = "Surface Item Details Edited"; note.caption = "The surface item details were edited."; note.dateSaved = DateTime.Now; note.userIdSaved = user.recId; note.isActive = true; note.fieldName = fieldName; note.recId = xData.SaveTyped("recId", typeof(oNote), note); } } } catch (Exception ex) { exception.HandleException("surface:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } return result; } /// /// Clear Bulk update /// /// private void ClearBulkUpdate(ArrayList bulkFields) { try { foreach (oSurfaceField bulkField in bulkFields) { if (bulkField.surfaceFieldTypeId != pNums.FieldType.Tab.GetHashCode() && bulkField.surfaceFieldTypeId != pNums.FieldType.Group.GetHashCode()) { pNums.FieldType typ = (pNums.FieldType)Enum.ToObject(typeof(pNums.FieldType), bulkField.surfaceFieldTypeId); switch (typ) { #region Number case pNums.FieldType.Number: //number TextBox txtNumberBox = (TextBox)pnlBulkUpdate.FindControl("bulk_" + bulkField.surfaceFieldName); if (txtNumberBox != null) { txtNumberBox.Text = ""; } break; #endregion #region Decimal case pNums.FieldType.Decimal: //decimal TextBox txtDecimalBox = (TextBox)pnlBulkUpdate.FindControl("bulk_" + bulkField.surfaceFieldName); if (txtDecimalBox != null) { txtDecimalBox.Text = ""; } break; #endregion #region Picklist case pNums.FieldType.Picklist: //picklist DropDownList ddDropdownlist = (DropDownList)pnlBulkUpdate.FindControl("bulk_" + bulkField.surfaceFieldName); if (ddDropdownlist != null) { ddDropdownlist.ClearSelection(); } break; #endregion #region Caption case pNums.FieldType.Caption: TextBox txtCaption = (TextBox)pnlBulkUpdate.FindControl("bulk_" + bulkField.surfaceFieldName); if (txtCaption != null) { txtCaption.Text = ""; } break; #endregion } } } } catch (Exception ex) { exception.HandleException("surface:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } } /// /// Save Bulk Update /// /// /// /// /// private bool SaveBulkUpdate(oSurfaceItem _surfaceItem, ArrayList bulkFields, ref ArrayList surfaceData) { try { DataTable surfaceFieldData = xData.GetTypedByCriteriaSpecificTable("recId", typeof(oSurfaceFieldData), "surfaceId,surfaceItemId", _surfaceItem.surfaceId + "," + _surfaceItem.recId, "recId"); DataTable myDataTable = new DataTable(); myDataTable = surfaceFieldData.Clone(); foreach (oSurfaceField bulkField in bulkFields) { if (bulkField.surfaceFieldTypeId != pNums.FieldType.Tab.GetHashCode() && bulkField.surfaceFieldTypeId != pNums.FieldType.Group.GetHashCode()) { oSurfaceFieldData fieldData = new oSurfaceFieldData(); myDataTable.Clear(); //get the data for this field ID var v = from enVal in surfaceFieldData.AsEnumerable() where (enVal.Field("surfaceFieldID") == bulkField.recId) select enVal; v.CopyToDataTable(myDataTable, LoadOption.OverwriteChanges); foreach (oSurfaceFieldData fd in utils.ConvertDataTableToList(myDataTable, typeof(oSurfaceFieldData))) { fieldData = fd; break; } fieldData.surfaceFieldID = bulkField.recId; fieldData.surfaceId = _surfaceItem.surfaceId; fieldData.surfaceItemId = _surfaceItem.recId; pNums.FieldType typ = (pNums.FieldType)Enum.ToObject(typeof(pNums.FieldType), bulkField.surfaceFieldTypeId); switch (typ) { #region Number case pNums.FieldType.Number: //number TextBox txtNumberBox = (TextBox)pnlBulkUpdate.FindControl("bulk_" + bulkField.surfaceFieldName); if (txtNumberBox != null) { if (bulkField.surfaceFieldName != "ParentSurfaceItemId") { int valueNum = 0; int.TryParse(txtNumberBox.Text, out valueNum); fieldData.surfaceFieldValueNum = valueNum; } } break; #endregion #region Decimal case pNums.FieldType.Decimal: //decimal TextBox txtDecimalBox = (TextBox)pnlBulkUpdate.FindControl("bulk_" + bulkField.surfaceFieldName); if (txtDecimalBox != null) { decimal valueDecimal = 0; decimal.TryParse(txtDecimalBox.Text, out valueDecimal); fieldData.surfaceFieldValueDecimal = valueDecimal; } break; #endregion #region Picklist case pNums.FieldType.Picklist: //picklist DropDownList ddDropdownlist = (DropDownList)pnlBulkUpdate.FindControl("bulk_" + bulkField.surfaceFieldName); if (ddDropdownlist != null) { if (bulkField.relationalObject.Length > 0 && bulkField.relationalObject != "0")//module picklist { fieldData.surfaceFieldValueChar = ddDropdownlist.SelectedValue.ToString(); } else { int lookupId = 0; int.TryParse(ddDropdownlist.SelectedValue, out lookupId); fieldData.surfaceFieldLookupID = lookupId; //no wants reason included for now, not required } } break; #endregion #region Caption case pNums.FieldType.Caption: TextBox txtCaption = (TextBox)pnlBulkUpdate.FindControl("bulk_" + bulkField.surfaceFieldName); if (txtCaption != null) { fieldData.surfaceFieldValueChar = txtCaption.Text; } break; #endregion } surfaceData.Add(fieldData); } } return true; } catch (Exception ex) { exception.HandleException("surface:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); return false; } } private string CalculateLookup(oSurfaceField lookupField, decimal sourceValue) { //assuming the source field and Bottom and Top fields numberic types, using decimals string value = ""; try { int lookupSurfaceId = 0; int.TryParse(lookupField.actionValue, out lookupSurfaceId); if (lookupSurfaceId <= 0) return value; DataTable dtLookup = xData.GetSurfaceDataAll(lookupSurfaceId, true); //rename columns for easer processing foreach (DataColumn col in dtLookup.Columns) { if (col.ColumnName.EndsWith("_Bottom")) col.ColumnName = "Bottom"; else if (col.ColumnName.EndsWith("_Top")) col.ColumnName = "Top"; else if (col.ColumnName.EndsWith("_Lookup")) col.ColumnName = "Lookup"; } if (dtLookup.Columns["Bottom"] == null || dtLookup.Columns["Top"] == null || dtLookup.Columns["Lookup"] == null) return value; dtLookup.DefaultView.Sort = "Bottom"; int counter = 0; foreach (DataRow row in dtLookup.Rows) { //bottom can be invalid when counter is 0, top can be invalid when counter is number of rows decimal bottom = 0m; if (!decimal.TryParse(row["Bottom"].ToString(), out bottom) && counter != 0) continue; decimal top = 0m; if (!decimal.TryParse(row["Top"].ToString(), out top) && counter != (dtLookup.Rows.Count - 1)) continue; if (counter == 0) { if (sourceValue <= top) { value = row["Lookup"].ToString(); break; } } else if (counter == dtLookup.Rows.Count - 1) { if (sourceValue >= bottom) { value = row["Lookup"].ToString(); break; } } else { if (sourceValue >= bottom && sourceValue <= top) { value = row["Lookup"].ToString(); break; } } counter++; } } catch (Exception ex) { exception.HandleException("surface:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } return value; } private string CalculateLookup(DataRow lookupFieldRow, decimal sourceValue) { //assuming the source field and Bottom and Top fields numberic types, using decimals string value = ""; try { int lookupSurfaceId = 0; int.TryParse(lookupFieldRow["actionValue"].ToString(), out lookupSurfaceId); if (lookupSurfaceId <= 0) return value; DataTable dtLookup = xData.GetSurfaceDataAll(lookupSurfaceId, true); //rename columns for easer processing foreach (DataColumn col in dtLookup.Columns) { if (col.ColumnName.EndsWith("_Bottom")) col.ColumnName = "Bottom"; else if (col.ColumnName.EndsWith("_Top")) col.ColumnName = "Top"; else if (col.ColumnName.EndsWith("_Lookup")) col.ColumnName = "Lookup"; } if (dtLookup.Columns["Bottom"] == null || dtLookup.Columns["Top"] == null || dtLookup.Columns["Lookup"] == null) return value; dtLookup.DefaultView.Sort = "Bottom"; int counter = 0; foreach (DataRow row in dtLookup.Rows) { //bottom can be invalid when counter is 0, top can be invalid when counter is number of rows decimal bottom = 0m; if (!decimal.TryParse(row["Bottom"].ToString(), out bottom) && counter != 0) continue; decimal top = 0m; if (!decimal.TryParse(row["Top"].ToString(), out top) && counter != (dtLookup.Rows.Count - 1)) continue; if (counter == 0) { if (sourceValue <= top) { value = row["Lookup"].ToString(); break; } } else if (counter == dtLookup.Rows.Count - 1) { if (sourceValue >= bottom) { value = row["Lookup"].ToString(); break; } } else { if (sourceValue >= bottom && sourceValue <= top) { value = row["Lookup"].ToString(); break; } } counter++; } } catch (Exception ex) { exception.HandleException("surface:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } return value; } /// /// Method to retain the selected tab open /// /// private void KeepSelectedGridTab(Repeater repeater) { if (base.SurfaceApp != null) { if (MainGridOptions.isTabbed) { int tabId = int.Parse(repeater.ID.Replace("rpt", "")); //CVH 2017-02-14 Subtabs. Only retrieve primary tabs where parentId = 0 ArrayList fieldTabs = xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceField), "surfaceId,isActive,parentId,surfaceFieldTypeId", base.SurfaceApp.recId + ",1,0," + (int)pNums.FieldType.Tab, "sequence"); int tabCounter = 0; foreach (oSurfaceField tab in fieldTabs) { tabCounter++; if (tab.recId == tabId) { string script = "$('#gSurfaceTabs li:eq(" + (tabCounter - 1) + ") a').tab('show');"; ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "ClickGridTab", script, true); break; } } } } } /// /// Method to Build User Control /// /// private static void BuildControl(oSurface surface) { foreach (oModule moduleItem in xData.GetTypedByCriteriaSpecific("recId", typeof(oModule), "recId", ((int)pNums.Module.Surface).ToString())) { surfaceHandler.BuildSurfaceAppTemplate(surface, controlPath + moduleItem.control, surfacePath, true); } } private void BindCompareDropdowns(oSurface surface, string parentSurface = "") { try { oSurfaceField filterField = null; foreach (oSurfaceField surfaceField in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceField), "surfaceId,isFilter,isComparable", surface.recId.ToString() + ",1,1", "sequence")) { filterField = surfaceField; break; } if (filterField != null) { for (int i = 1; i <= surface.columnCount; i++) { DropDownList ddlCompare = null; if (parentSurface != "") { if (pnlSurfaceCompare.FindControl("ddlCompare_" + i.ToString() + "__" + surface.recId.ToString() + "__" + parentSurface) != null) ddlCompare = (DropDownList)pnlSurfaceCompare.FindControl("ddlCompare_" + i.ToString() + "__" + surface.recId.ToString() + "__" + parentSurface); } else { if (pnlSurfaceCompare.FindControl("ddlCompare_" + i.ToString() + "__" + surface.recId.ToString()) != null) ddlCompare = (DropDownList)pnlSurfaceCompare.FindControl("ddlCompare_" + i.ToString() + "__" + surface.recId.ToString()); } if (base.IsChildSurface) { DataTable surfaceData = new DataTable(); List list = new List(); oDynamicParam par1 = new oDynamicParam(); par1.paramDisplayName = "SurfaceID"; par1.paramObject = base.SurfaceApp.recId; list.Add(par1); oDynamicParam par2 = new oDynamicParam(); par2.paramDisplayName = "ParentSurfaceItemId"; par2.paramObject = base.ParentSurfaceItemId; list.Add(par2); surfaceData = xData.GetTypedTableByProc("recId", typeof(oSurfaceFieldData), "sp_GetChildSurfaceData", list); ddlCompare.DataSource = surfaceData; ddlCompare.DataValueField = "itemID"; ddlCompare.DataTextField = filterField.surfaceFieldName; if (filterField.surfaceFieldTypeId == (int)pNums.FieldType.Date) { surfaceData.Columns.Add("dateField", typeof(DateTime), filterField.surfaceFieldName); ddlCompare.DataTextField = "dateField"; ddlCompare.DataTextFormatString = "{0:dd/MM/yyyy}"; } } else if (parentSurface != "") { if (base.SurfaceAppItem != null) { DataTable surfaceData = new DataTable(); List list = new List(); oDynamicParam par1 = new oDynamicParam(); par1.paramDisplayName = "SurfaceID"; par1.paramObject = surface.recId; list.Add(par1); oDynamicParam par2 = new oDynamicParam(); par2.paramDisplayName = "ParentSurfaceItemId"; par2.paramObject = base.SurfaceAppItem.recId; list.Add(par2); surfaceData = xData.GetTypedTableByProc("recId", typeof(oSurfaceFieldData), "sp_GetChildSurfaceData", list); ddlCompare.DataSource = surfaceData; ddlCompare.DataValueField = "itemID"; ddlCompare.DataTextField = filterField.surfaceFieldName; if (filterField.surfaceFieldTypeId == (int)pNums.FieldType.Date) { surfaceData.Columns.Add("dateField", typeof(DateTime), filterField.surfaceFieldName); ddlCompare.DataTextField = "dateField"; ddlCompare.DataTextFormatString = "{0:dd/MM/yyyy}"; } } } else { ArrayList filterList = xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceFieldData), "surfaceId,surfaceFieldID", surface.recId.ToString() + "," + filterField.recId.ToString()); ddlCompare.DataSource = filterList; ddlCompare.DataValueField = "surfaceItemId"; pNums.FieldType typ = (pNums.FieldType)Enum.ToObject(typeof(pNums.FieldType), filterField.surfaceFieldTypeId); switch (typ) { case pNums.FieldType.Date: ddlCompare.DataTextField = "surfaceFieldValueDate"; ddlCompare.DataTextFormatString = "{0:dd/MM/yyyy}"; break; case pNums.FieldType.Text: ddlCompare.DataTextField = "surfaceFieldValueChar"; break; default: break; } } ddlCompare.DataBind(); if (i > 3 && ddlCompare.Items.Count > 3) { ddlCompare.SelectedIndex = 3; ddlCompare_SelectedIndexChanged(ddlCompare, EventArgs.Empty); } else if (i > 2 && ddlCompare.Items.Count > 2) { ddlCompare.SelectedIndex = 2; ddlCompare_SelectedIndexChanged(ddlCompare, EventArgs.Empty); } else if (i > 1 && ddlCompare.Items.Count > 1) { ddlCompare.SelectedIndex = 1; ddlCompare_SelectedIndexChanged(ddlCompare, EventArgs.Empty); } else { ddlCompare_SelectedIndexChanged(ddlCompare, EventArgs.Empty); } } } } catch (Exception ex) { exception.HandleException("surface:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } } /// /// used for repeater aggregates /// /// /// /// protected string getTotalFor(string field, string formatString) { decimal value = 0; SurfaceGridTotals.TryGetValue(field, out value); return value.ToString(formatString); } protected string getAverageFor(string field, string formatString) { decimal value = 0; SurfaceGridAverages.TryGetValue(field, out value); return value.ToString(formatString); } private void sumDataTable(DataTable dt) { try { //CVH 2017-03-01 Otherwise division by 0 if (dt.Rows.Count > 0) { List totalsKeyList = new List(SurfaceGridTotals.Keys); for (int i = 0; i < dt.Rows.Count; ++i) { foreach (string key in totalsKeyList) { if (dt.Columns.Contains(key)) { if (dt.Rows[i][key].ToString() == "") dt.Rows[i][key] = 0; SurfaceGridTotals[key] += Convert.ToDecimal(dt.Rows[i][key]); } } } List averagesKeyList = new List(SurfaceGridAverages.Keys); foreach (string key in averagesKeyList) { SurfaceGridAverages[key] = (SurfaceGridTotals[key]) / (dt.Rows.Count); } } } catch (Exception ex) { exception.HandleException("surface:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } } #endregion #region events /// /// Page initiliazie event to dynamicall load user controls - grid surface apps /// /// /// protected void Page_Init(object sender, EventArgs e) { if (base.SurfaceApp != null) { if (base.SurfaceAppItem == null) { oSurfaceItem item = new oSurfaceItem(); item.surfaceId = base.SurfaceApp.recId; } } } /// /// Page Load Event /// /// /// protected void Page_Load(object sender, EventArgs e) { try { oUser user = handler.ReturnUser(); oSurfaceControlParcel parcel = new oSurfaceControlParcel(); if (base.SurfaceApp != null) { if (!Page.IsPostBack) { if (utils.verifySession("SurfaceControlParcel")) { parcel = (oSurfaceControlParcel)Session["SurfaceControlParcel"]; //set values from parcel base.SurfaceApp = parcel.SurfaceApp; base.SurfaceAppItem = parcel.SurfaceAppItem; base.SurfaceAppItemId = parcel.SurfaceAppItem.recId; base.ParentSurfaceItemId = parcel.ParentSurfaceItemId; base.ParentSurfaceId = parcel.ParentSurfaceId; base.ChildParentSurfaceId = parcel.ChildParentSurfaceId; base.ChildParentSurfaceItemId = parcel.ChildParentSurfaceItemId; base.IsChildSurface = parcel.IsChildSurface; base.IsSubChildSurface = parcel.IsSubChildSurface; base.IsClone = parcel.IsClone; utils.disposeSession("SurfaceControlParcel"); } else if (Request.QueryString["i"] != null && Request.QueryString["i"] != String.Empty) { //CVH 2017-10-04 Cater for view link click from child grid if (Request.QueryString["c"] != null && Request.QueryString["c"] != String.Empty && Request.QueryString["v"] != null && Request.QueryString["v"] != String.Empty) { int parentItemId = 0; int.TryParse(Request.QueryString["i"], out parentItemId); int childItemId = 0; int.TryParse(Request.QueryString["c"], out childItemId); bool isFromView = false; if (Request.QueryString["v"] == "1") isFromView = true; if (parentItemId > 0) { oSurfaceItem parentItem = new oSurfaceItem(); foreach (oSurfaceItem tmpItem in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceItem), "recId", parentItemId.ToString())) { parentItem = tmpItem; } if (childItemId > 0) //view { foreach (oSurfaceItem childItem in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceItem), "recId", childItemId.ToString())) { foreach (oSurface childSurface in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurface), "recId", childItem.surfaceId.ToString())) { //load the surface app control if (!File.Exists(Server.MapPath(surfacePath + childSurface.name + "_view.ascx"))) { BuildControl(childSurface); } oSurfaceControlParcel childParcel = new oSurfaceControlParcel(); childParcel.SurfaceApp = childSurface; childParcel.SurfaceAppItem = childItem; childParcel.IsView = isFromView; int topItemId = 0; //top level parent if current child is a sub child (child > parent > top) if (Request.QueryString["t"] != null && Request.QueryString["t"] != String.Empty) int.TryParse(Request.QueryString["t"], out topItemId); if (topItemId > 0) { foreach (oSurfaceItem topItem in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceItem), "recId", topItemId.ToString())) { childParcel.ParentSurfaceId = parentItem.surfaceId; childParcel.ParentSurfaceItemId = parentItem.recId; childParcel.ChildParentSurfaceId = topItem.surfaceId; childParcel.ChildParentSurfaceItemId = topItem.recId; childParcel.IsChildSurface = true; childParcel.IsSubChildSurface = true; childParcel.IsClone = false; } } else { childParcel.ParentSurfaceId = parentItem.surfaceId; childParcel.ParentSurfaceItemId = parentItem.recId; childParcel.ChildParentSurfaceId = 0; childParcel.ChildParentSurfaceItemId = 0; childParcel.IsChildSurface = true; childParcel.IsSubChildSurface = false; childParcel.IsClone = false; } Session["SurfaceControlParcel"] = childParcel; Session["childAppName"] = childSurface.name; Response.Redirect(Request.Url.AbsoluteUri.Split('?')[0] + "?mode=view", false); } } } else //add { if (Request.QueryString["s"] != null && Request.QueryString["s"] != String.Empty) { int childSurfaceId = 0; int.TryParse(Request.QueryString["s"], out childSurfaceId); if (childSurfaceId > 0) { foreach (oSurface childSurface in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurface), "recId", childSurfaceId.ToString())) { oSurfaceItem childItem = new oSurfaceItem(); childItem.recId = 0; childItem.surfaceId = childSurface.recId; oSurfaceControlParcel childParcel = new oSurfaceControlParcel(); childParcel.SurfaceApp = childSurface; childParcel.SurfaceAppItem = childItem; childParcel.IsView = isFromView; int topItemId = 0; //top level parent if current child is a sub child (child > parent > top) if (Request.QueryString["t"] != null && Request.QueryString["t"] != String.Empty) int.TryParse(Request.QueryString["t"], out topItemId); if (topItemId > 0) { foreach (oSurfaceItem topItem in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceItem), "recId", topItemId.ToString())) { childParcel.ParentSurfaceId = parentItem.surfaceId; childParcel.ParentSurfaceItemId = parentItem.recId; childParcel.ChildParentSurfaceId = topItem.surfaceId; childParcel.ChildParentSurfaceItemId = topItem.recId; childParcel.IsChildSurface = true; childParcel.IsSubChildSurface = true; childParcel.IsClone = false; } } else { childParcel.ParentSurfaceId = parentItem.surfaceId; childParcel.ParentSurfaceItemId = parentItem.recId; childParcel.ChildParentSurfaceId = 0; childParcel.ChildParentSurfaceItemId = 0; childParcel.IsChildSurface = true; childParcel.IsSubChildSurface = false; childParcel.IsClone = false; } Session["SurfaceControlParcel"] = childParcel; Session["childAppName"] = childSurface.name; Response.Redirect(Request.Url.AbsoluteUri.Split('?')[0] + "?mode=form", false); } } } } } } else { int itemId = 0; int.TryParse(Request.QueryString["i"], out itemId); if (itemId > 0) //view { foreach (oSurfaceItem item in xData.GetTypedByCriteriaSpecific("rcId", typeof(oSurfaceItem), "recId", itemId.ToString())) { base.SurfaceAppItem = item; base.SurfaceAppItemId = item.recId; base.ActiveTabPanel = String.Empty; base.SurfaceApp.isWizzard = false; //Go to View Control oSurfaceControlParcel viewparcel = new oSurfaceControlParcel(); viewparcel.SurfaceApp = base.SurfaceApp; viewparcel.SurfaceAppItem = item; viewparcel.ParentSurfaceId = base.ParentSurfaceId; viewparcel.ParentSurfaceItemId = base.ParentSurfaceItemId; viewparcel.ChildParentSurfaceId = base.ChildParentSurfaceId; viewparcel.ChildParentSurfaceItemId = base.ChildParentSurfaceItemId; viewparcel.IsChildSurface = base.IsChildSurface; viewparcel.IsSubChildSurface = base.IsSubChildSurface; viewparcel.IsClone = base.IsClone; Session["SurfaceControlParcel"] = viewparcel; Response.Redirect(Request.Url.AbsoluteUri.Split('?')[0] + "?mode=view", false); } } else //add { //go to form control in new mode oSurfaceItem item = new oSurfaceItem(); item.recId = 0; item.surfaceId = base.SurfaceApp.recId; oSurfaceControlParcel newparcel = new oSurfaceControlParcel(); newparcel.SurfaceApp = base.SurfaceApp; newparcel.SurfaceAppItem = item; newparcel.ParentSurfaceId = base.ParentSurfaceId; newparcel.ParentSurfaceItemId = base.ParentSurfaceItemId; newparcel.ChildParentSurfaceId = base.ChildParentSurfaceId; newparcel.ChildParentSurfaceItemId = base.ChildParentSurfaceItemId; newparcel.IsChildSurface = base.IsChildSurface; newparcel.IsSubChildSurface = base.IsSubChildSurface; newparcel.IsClone = base.IsClone; Session["SurfaceControlParcel"] = newparcel; Response.Redirect(Request.Url.AbsoluteUri.Split('?')[0] + "?mode=form", false); } } } pnlSurfaceGrid.Enabled = true; btnNew.Enabled = true; base.SurfaceAppItem = null; base.SurfaceAppItemId = 0; base.SurfaceAppGridEditTypeId = 0; base.ActiveTabPanel = String.Empty; int startIndex = 0; int maxLength = 50; if (MainGridOptions.pagingCount > 0) { maxLength = MainGridOptions.pagingCount; if (ddSurfaceEntries.Items.FindByValue(MainGridOptions.pagingCount.ToString()) != null) ddSurfaceEntries.SelectedValue = MainGridOptions.pagingCount.ToString(); } btnNew.Visible = (user.userType >= MainGridOptions.addAccessType && user.userType != (int)pNums.UserType.CustomUser) || (user.mimicUserType >= MainGridOptions.addAccessType && user.userType == (int)pNums.UserType.CustomUser); BindSurfaceGridColumnFilters(false); //CVH 2017-04-13 Preset Status filter on Profiles surface to current Canvas oSetup setup = handler.ReturnSetup(); if (setup.code == "STUD-1" && base.SurfaceApp.name == "Profiles") { STUD1_PreSelectProfilesFilter(); BindSurfaceGridColumnFilters(true); } BindSurfaceGrid(startIndex, maxLength); oSurface surface = base.SurfaceApp; parcel = new oSurfaceControlParcel(); bool viewSingle = false; if (utils.verifySession("surfaceItemId")) { foreach (oSurfaceItem userItem in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceItem), "recId", Session["surfaceItemId"].ToString())) { base.SurfaceAppItem = userItem; base.SurfaceAppItemId = userItem.recId; viewSingle = true; break; } utils.disposeSession("surfaceItemId"); } if (surface.isDefaultToForm) { oSurfaceItem item = new oSurfaceItem(); item.surfaceId = surface.recId; bool userLinks = false; //GR Added the ability to pickup the individual surface item related to user if (user.userType == (int)pNums.UserType.WebsiteUser) { //JR is userLink contains data, then go to grid if (xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceItem), "surfaceId,isActive,isDeleted,userLink", surface.recId + ",1,0," + user.recId, "dateCreated Desc").Count > 0) { TogglePanels("pnlSurfaceGrid"); userLinks = true; } else { btnNew.Visible = false; foreach (oSurfaceItem userItem in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceItem), "surfaceId,isActive,userLink", surface.recId + ",1," + user.recId, "dateCreated Desc")) { base.SurfaceAppItem = userItem; base.SurfaceAppItemId = userItem.recId; item = userItem; break; } //Go to form parcel.SurfaceApp = base.SurfaceApp; parcel.SurfaceAppItem = item; parcel.ParentSurfaceId = base.ParentSurfaceId; parcel.ParentSurfaceItemId = base.ParentSurfaceItemId; parcel.ChildParentSurfaceId = base.ChildParentSurfaceId; parcel.ChildParentSurfaceItemId = base.ChildParentSurfaceItemId; parcel.IsChildSurface = base.IsChildSurface; parcel.IsSubChildSurface = base.IsSubChildSurface; parcel.IsClone = base.IsClone; Session["SurfaceControlParcel"] = parcel; Response.Redirect(Request.Url.AbsoluteUri.Split('?')[0] + "?mode=form", false); } } if (!userLinks) { //Go to form parcel.SurfaceApp = base.SurfaceApp; parcel.SurfaceAppItem = item; parcel.ParentSurfaceId = base.ParentSurfaceId; parcel.ParentSurfaceItemId = base.ParentSurfaceItemId; parcel.ChildParentSurfaceId = base.ChildParentSurfaceId; parcel.ChildParentSurfaceItemId = base.ChildParentSurfaceItemId; parcel.IsChildSurface = base.IsChildSurface; parcel.IsSubChildSurface = base.IsSubChildSurface; parcel.IsClone = base.IsClone; Session["SurfaceControlParcel"] = parcel; Response.Redirect(Request.Url.AbsoluteUri.Split('?')[0] + "?mode=form", false); } } /* CVH 2016-09-09 Add ELSE, otherwise Default to Form doesn't work. NB for TSP */ else if (surface.isComparable) { BindCompareDropdowns(surface); lnkGridView.Visible = true; TogglePanels("pnlSurfaceCompare"); } else if ((base.RowLimit == 1 || viewSingle) && base.SurfaceAppItem != null) { //Go to view parcel.SurfaceApp = base.SurfaceApp; parcel.SurfaceAppItem = base.SurfaceAppItem; parcel.ParentSurfaceId = base.ParentSurfaceId; parcel.ParentSurfaceItemId = base.ParentSurfaceItemId; parcel.ChildParentSurfaceId = base.ChildParentSurfaceId; parcel.ChildParentSurfaceItemId = base.ChildParentSurfaceItemId; parcel.IsChildSurface = base.IsChildSurface; parcel.IsSubChildSurface = base.IsSubChildSurface; parcel.IsClone = base.IsClone; Session["SurfaceControlParcel"] = parcel; Response.Redirect(Request.Url.AbsoluteUri.Split('?')[0] + "?mode=view", false); } else { TogglePanels("pnlSurfaceGrid"); } if (utils.verifySession("referItem")) { int itemId = int.Parse(Session["referItem"].ToString()); utils.disposeSession("referItem"); foreach (oSurfaceItem userItem in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceItem), "recId", itemId.ToString())) { //Go to Form control viewSingle = true; parcel.SurfaceApp = base.SurfaceApp; parcel.SurfaceAppItem = userItem; parcel.ParentSurfaceId = base.ParentSurfaceId; parcel.ParentSurfaceItemId = base.ParentSurfaceItemId; parcel.ChildParentSurfaceId = base.ChildParentSurfaceId; parcel.ChildParentSurfaceItemId = base.ChildParentSurfaceItemId; parcel.IsChildSurface = base.IsChildSurface; parcel.IsSubChildSurface = base.IsSubChildSurface; parcel.IsClone = base.IsClone; Session["SurfaceControlParcel"] = parcel; Response.Redirect(Request.Url.AbsoluteUri.Split('?')[0] + "?mode=form", false); break; } } } if (base.SurfaceAppGridEditTypeId <= 0) { int editTypeId = 1; editTypeId = MainGridOptions.surfaceGridEditTypeId; base.SurfaceAppGridEditTypeId = editTypeId; } } } catch (Exception ex) { exception.HandleException("surface:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } } /// /// Selected index changed eventfor entires per page /// /// /// protected void ddSurfaceEntries_SelectedIndexChanged(object sender, EventArgs e) { int startIndex = 0; int.TryParse(txbPageNumber.Value, out startIndex); int maxLength = int.Parse(ddSurfaceEntries.SelectedValue); BindSurfaceGrid(startIndex, maxLength); } /// /// Next /// /// /// protected void btnPageNext_Click(object sender, EventArgs e) { int totalRecords = 0; int.TryParse(lblCount.Text, out totalRecords); int pageIndex = 0; int.TryParse(txbPageNumber.Value, out pageIndex); int maxLength = int.Parse(ddSurfaceEntries.SelectedValue); if (totalRecords > 0) { if (pageIndex > 1) { if (((decimal)pageIndex - 1) < (decimal)totalRecords / (decimal)maxLength) { txbPageNumber.Value = (pageIndex + 1).ToString(); BindSurfaceGrid(pageIndex, maxLength); } } else { if ((decimal)pageIndex < (decimal)totalRecords / (decimal)maxLength) { txbPageNumber.Value = (pageIndex + 1).ToString(); BindSurfaceGrid(pageIndex, maxLength); } } } } /// /// Back /// /// /// protected void btnPageBack_Click(object sender, EventArgs e) { int pageIndex = 0; int maxLength = int.Parse(ddSurfaceEntries.SelectedValue); int.TryParse(txbPageNumber.Value, out pageIndex); if (pageIndex > 1) { txbPageNumber.Value = (pageIndex - 1).ToString(); BindSurfaceGrid(pageIndex, maxLength); } } /// /// Search Surface Button /// /// /// protected void btnSearch_Click(object sender, EventArgs e) { int startIndex = 0; int.TryParse(txbPageNumber.Value, out startIndex); int maxLength = int.Parse(ddSurfaceEntries.SelectedValue); BindSurfaceGrid(startIndex, maxLength); BindSurfaceGridColumnFilters(true); } /// /// Refresh Filters Button /// /// /// protected void lnkRefreshFilterSurfaceGrid_Click(object sender, EventArgs e) { try { BindSurfaceGridColumnFilters(true); } catch (Exception ex) { exception.HandleException("surface:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } } /// /// Clear Filters Button /// /// /// protected void lnkRemoveFilterSurfaceGrid_Click(object sender, EventArgs e) { try { BindSurfaceGridColumnFilters(false); //CVH 2017-04-13 Preset Status filter on Profiles surface to current Canvas oSetup setup = handler.ReturnSetup(); if (setup.code == "STUD-1" && base.SurfaceApp.name == "Profiles") { STUD1_PreSelectProfilesFilter(); BindSurfaceGridColumnFilters(true); } } catch (Exception ex) { exception.HandleException("surface:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } } /// /// Filter Grid Button /// /// /// protected void lnkFilterSurfaceGrid_Click(object sender, EventArgs e) { try { int startIndex = 0; int.TryParse(txbPageNumber.Value, out startIndex); int maxLength = int.Parse(ddSurfaceEntries.SelectedValue); BindSurfaceGrid(startIndex, maxLength); BindSurfaceGridColumnFilters(true); } catch (Exception ex) { exception.HandleException("surface:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } } /// /// New Surface Item /// /// /// protected void btnNew_Click(object sender, EventArgs e) { try { if (base.SurfaceApp != null) { //go to form control in new mode oSurfaceItem item = new oSurfaceItem(); item.recId = 0; item.surfaceId = base.SurfaceApp.recId; oSurfaceControlParcel parcel = new oSurfaceControlParcel(); parcel.SurfaceApp = base.SurfaceApp; parcel.SurfaceAppItem = item; parcel.ParentSurfaceId = base.ParentSurfaceId; parcel.ParentSurfaceItemId = base.ParentSurfaceItemId; parcel.ChildParentSurfaceId = base.ChildParentSurfaceId; parcel.ChildParentSurfaceItemId = base.ChildParentSurfaceItemId; parcel.IsChildSurface = base.IsChildSurface; parcel.IsSubChildSurface = base.IsSubChildSurface; parcel.IsClone = base.IsClone; Session["SurfaceControlParcel"] = parcel; Response.Redirect(Request.Url.AbsoluteUri.Split('?')[0] + "?mode=form", false); } } catch (Exception ex) { exception.HandleException("surface:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } } /// /// event for all surface button clicks /// /// /// protected void surfaceButton_Click(object sender, EventArgs e) { //The body of this method is custom per surface app try { LinkButton btn = (LinkButton)sender; string btnID = btn.ID; string commandArgumentValue = btn.CommandArgument; //DataTable surfaceItemData; //DataRow surfaceItemRow; switch (btnID) { case "ApplicantInformation_ApplicantInformation_SBFCandidateReport": case "ProfileHeader_SBFCandidateReport": string reportBody = xSurfaceCustomMethod.GenerateSBFProfileReport(base.SurfaceApp.recId, Convert.ToInt32(commandArgumentValue)); string reportFile = "SBF_" + commandArgumentValue + "_" + DateTime.Now.ToString("yyyy-MM-dd-hh-mm") + ".pdf"; string reportPath = HttpContext.Current.Server.MapPath("~/upload/documents/"); utils.validateFolder(reportPath); if (utils.ConvertHTMLToPDFFile(reportBody, reportPath + reportFile, true, "", "", false)) { Response.Clear(); //Set the appropriate ContentType. Response.ContentType = "Application/pdf"; Response.BufferOutput = true; Response.AppendHeader("Content-Disposition", "attachment; filename=" + reportFile); Response.TransmitFile(reportPath + reportFile); Response.Flush(); Response.SuppressContent = true; ApplicationInstance.CompleteRequest(); } break; case "PatientInformation_PatientDetails_Dictated": btn.Text = " "; //change checkbox value foreach (oSurfaceField field in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceField), "surfaceFieldTypeId,surfaceId,surfaceFieldName", ((int)pNums.FieldType.Checkbox).ToString() + "," + base.SurfaceApp.recId.ToString() + ",PatientProfileHeader_Dictated")) { foreach (oSurfaceFieldData data in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceFieldData), "surfaceId,surfaceItemId,surfaceFieldId", base.SurfaceApp.recId.ToString() + "," + commandArgumentValue + "," + field.recId)) { data.surfaceFieldValueBool = !data.surfaceFieldValueBool; xData.UpdateTyped("recId", data.recId.ToString(), typeof(oSurfaceFieldData), data); xData.SaveSurfaceItemToQueryTable(base.SurfaceApp.recId, Convert.ToInt32(commandArgumentValue)); if (data.surfaceFieldValueBool) { btn.RemoveCssClass("btn-danger"); btn.RemoveCssClass("btn-success"); btn.AddCssClass("btn-success"); } else { btn.RemoveCssClass("btn-success"); btn.RemoveCssClass("btn-danger"); btn.AddCssClass("btn-danger"); } } } break; case "PatientInformation_PatientDetails_Sent": btn.Text = " "; //change checkbox value foreach (oSurfaceField field in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceField), "surfaceFieldTypeId,surfaceId,surfaceFieldName", ((int)pNums.FieldType.Checkbox).ToString() + "," + base.SurfaceApp.recId.ToString() + ",PatientProfileHeader_Sent")) { foreach (oSurfaceFieldData data in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceFieldData), "surfaceId,surfaceItemId,surfaceFieldId", base.SurfaceApp.recId.ToString() + "," + commandArgumentValue + "," + field.recId)) { data.surfaceFieldValueBool = !data.surfaceFieldValueBool; xData.UpdateTyped("recId", data.recId.ToString(), typeof(oSurfaceFieldData), data); xData.SaveSurfaceItemToQueryTable(base.SurfaceApp.recId, Convert.ToInt32(commandArgumentValue)); if (data.surfaceFieldValueBool) { btn.RemoveCssClass("btn-danger"); btn.RemoveCssClass("btn-success"); btn.AddCssClass("btn-success"); } else { btn.RemoveCssClass("btn-success"); btn.RemoveCssClass("btn-danger"); btn.AddCssClass("btn-danger"); } } } break; default: break; } } catch (Exception ex) { exception.HandleException("surface:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } } /// /// Bulk Update /// /// /// protected void btnBulkUpdate_Click(object sender, EventArgs e) { TogglePanels("pnlSurfaceGrid"); lblBulkUpdateResult.Text = ""; pnlBulkUpdateResult.Visible = false; upBulkUpdate.Update(); ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "showBulkUpdateModal", "$('#modBulkUpdate').modal('show');", true); } /// /// Save Bulk Update /// /// /// protected void btnSaveBulkUpdate_Click(object sender, EventArgs e) { try { if (pnlBulkUpdate.Controls.Count <= 0) { TogglePanels("pnlSurfaceGrid"); pnlBulkUpdateResult.Visible = true; lblBulkUpdateResult.Text = "No fields to update."; ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "showBulkUpdateModal", "$('.modal-backdrop').remove(); $('body').removeClass('modal-open');$('#modBulkUpdate').modal('show');", true); return; } bool result = false; bool anyChecked = false; ArrayList bulkFields = null; //find repeater and all selected items foreach (Control rpt in pnlSurfaceGrid.Controls) { if (rpt.GetType() == typeof(Repeater)) { Repeater repeater = (Repeater)rpt; foreach (RepeaterItem rptItem in repeater.Items) { CheckBox chk = (CheckBox)rptItem.FindControl("chkBulkUpdate"); if (chk != null && chk.Checked) { anyChecked = true; LinkButton lnkEdit = (LinkButton)rptItem.FindControl("lnkEdit"); if (lnkEdit != null) { int itemId = int.Parse(lnkEdit.CommandArgument); if (itemId > 0) { foreach (oSurfaceItem surfaceItem in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceItem), "recId", itemId.ToString())) { if (bulkFields == null) bulkFields = xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceField), "surfaceId,isActive,enableBulkUpdate", surfaceItem.surfaceId + ",1,1", "sequence"); result = PerformBulkUpdate(surfaceItem, bulkFields); break; } } } } if (anyChecked && !result) break; } } } pnlBulkUpdateResult.Visible = true; if (!anyChecked) lblBulkUpdateResult.Text = "No items have been selected."; else if (result) { ClearBulkUpdate(bulkFields); lblBulkUpdateResult.Text = "All selected items have been updated successfully."; } else lblBulkUpdateResult.Text = "Bulk update failed."; upBulkUpdate.Update(); int startIndex = 0; int.TryParse(txbPageNumber.Value, out startIndex); int maxLength = int.Parse(ddSurfaceEntries.SelectedValue); BindSurfaceGrid(startIndex, maxLength); BindSurfaceGridColumnFilters(true); TogglePanels("pnlSurfaceGrid"); ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "showBulkUpdateModal", "$('.modal-backdrop').remove(); $('body').removeClass('modal-open');$('#modBulkUpdate').modal('show');", true); } catch (Exception ex) { exception.HandleException("surface:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } } /// /// Edit Surface Item /// /// /// protected void lnkEdit_Click(object sender, EventArgs e) { try { if (sender.GetType() == typeof(LinkButton)) { LinkButton lnkButton = (LinkButton)sender; RepeaterItem rptItem = (RepeaterItem)lnkButton.Parent.Parent; int itemId = int.Parse(((LinkButton)sender).CommandArgument); if (itemId > 0) { EditSurface(itemId, rptItem); } } } catch (Exception ex) { exception.HandleException("surface:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } } /// /// Open User Link Modal /// /// /// protected void lnkUserLink_Click(object sender, EventArgs e) { try { if (sender.GetType() == typeof(LinkButton)) { LinkButton lnkButton = (LinkButton)sender; RepeaterItem rptItem = (RepeaterItem)lnkButton.Parent.Parent; int itemId = int.Parse(((LinkButton)sender).CommandArgument); if (itemId > 0) { Session["userLinkItemId"] = itemId; IControlBase userLink = (IControlBase)this.FindControl("userLink"); userLink.ReloadControl(); ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "myModalUserLink", "$('#modUserLinks" + base.SurfaceApp.name + "').modal();", true); } } } catch (Exception ex) { exception.HandleException("surface:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } } /// /// Open User Link Modal /// /// /// protected void lnkUserLinkChild_Click(object sender, EventArgs e) { try { if (sender.GetType() == typeof(LinkButton)) { LinkButton lnkButton = (LinkButton)sender; RepeaterItem rptItem = (RepeaterItem)lnkButton.Parent; int itemId = int.Parse(((LinkButton)sender).CommandArgument); if (itemId > 0) { Session["userLinkItemId"] = itemId; IControlBase userLink = (IControlBase)this.FindControl("userLink"); userLink.ReloadControl(); ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "myModalUserLink", "$('#modUserLinks" + base.SurfaceApp.name + "').modal();", true); } } } catch (Exception ex) { exception.HandleException("surface:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } } /// /// Edit click from View /// /// /// protected void btnViewEdit_Click(object sender, EventArgs e) { try { if (sender.GetType() == typeof(LinkButton)) { LinkButton lnkButton = (LinkButton)sender; int itemId = int.Parse(((LinkButton)sender).CommandArgument); if (itemId > 0) { foreach (oSurfaceItem item in xData.GetTypedByCriteriaSpecific("rcId", typeof(oSurfaceItem), "recId", itemId.ToString())) { base.SurfaceAppItem = item; base.SurfaceAppItemId = item.recId; base.ActiveTabPanel = String.Empty; //Go to form control oSurfaceControlParcel parcel = new oSurfaceControlParcel(); parcel.SurfaceApp = base.SurfaceApp; parcel.SurfaceAppItem = item; parcel.ParentSurfaceId = base.ParentSurfaceId; parcel.ParentSurfaceItemId = base.ParentSurfaceItemId; parcel.ChildParentSurfaceId = base.ChildParentSurfaceId; parcel.ChildParentSurfaceItemId = base.ChildParentSurfaceItemId; parcel.IsChildSurface = base.IsChildSurface; parcel.IsSubChildSurface = base.IsSubChildSurface; parcel.IsClone = base.IsClone; Session["SurfaceControlParcel"] = parcel; Response.Redirect(Request.Url.AbsoluteUri.Split('?')[0] + "?mode=form", false); } } } upSurface.Update(); } catch (Exception ex) { exception.HandleException("surface:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } } /// /// Add Surface Item /// /// /// protected void lnkView_Click(object sender, EventArgs e) { try { if (sender.GetType() == typeof(LinkButton)) { int itemId = int.Parse(((LinkButton)sender).CommandArgument); if (itemId > 0) { foreach (oSurfaceItem item in xData.GetTypedByCriteriaSpecific("rcId", typeof(oSurfaceItem), "recId", itemId.ToString())) { base.SurfaceAppItem = item; base.SurfaceAppItemId = item.recId; base.ActiveTabPanel = String.Empty; base.SurfaceApp.isWizzard = false; //Go to View Control oSurfaceControlParcel parcel = new oSurfaceControlParcel(); parcel.SurfaceApp = base.SurfaceApp; parcel.SurfaceAppItem = item; parcel.ParentSurfaceId = base.ParentSurfaceId; parcel.ParentSurfaceItemId = base.ParentSurfaceItemId; parcel.ChildParentSurfaceId = base.ChildParentSurfaceId; parcel.ChildParentSurfaceItemId = base.ChildParentSurfaceItemId; parcel.IsChildSurface = base.IsChildSurface; parcel.IsSubChildSurface = base.IsSubChildSurface; parcel.IsClone = base.IsClone; Session["SurfaceControlParcel"] = parcel; Response.Redirect(Request.Url.AbsoluteUri.Split('?')[0] + "?mode=view", false); } dynamic enquiry = this.FindControl("enquiryUC"); if (enquiry != null) { oUser usr = new oUser(); if (utils.verifySession("user")) { usr = (oUser)Session["user"]; } //CVH 2016-11-17 Set the Note button field name, used when linking notes to surface string fieldName = ""; foreach (oSurfaceField field in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceField), "surfaceId,surfaceFieldTypeId,isActive", base.SurfaceApp.recId + "," + (int)pNums.FieldType.Note + ",1")) { fieldName = field.surfaceFieldName; break; } Session["noteSurfaceFieldName"] = fieldName; Session["account"] = xDebtors.SetAccountItem(itemId, base.SurfaceApp.recId, usr); Session["loadType"] = "Embedded"; enquiry.ReloadControl(); } } } } catch (Exception ex) { exception.HandleException("surface:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } } /// /// Remove a surface item /// /// /// protected void lnkRemove_Click(object sender, EventArgs e) { try { if (sender.GetType() == typeof(LinkButton)) { /* CVH 2016-09-19 Don't delete surface items, set item isDeleted = true */ int itemId = int.Parse(((LinkButton)sender).CommandArgument); /* CVH 2016-07-22 Delete all child data items linking to current parent item id */ foreach (oSurfaceField parentSurfaceItemIdField in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceField), "surfaceFieldName", "ParentSurfaceItemId")) { foreach (oSurfaceFieldData childItemId in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceFieldData), "surfaceFieldID,surfaceFieldValueNum", parentSurfaceItemIdField.recId + "," + itemId.ToString())) { foreach (oSurfaceItem childItem in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceItem), "recId", childItemId.surfaceItemId.ToString())) { childItem.isDeleted = true; if (xData.UpdateTyped("recId", childItem.recId.ToString(), typeof(oSurfaceItem), childItem)) xData.DeleteSurfaceItemFromQueryTable(childItem.surfaceId, childItem.recId); } } } foreach (oSurfaceItem item in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceItem), "recId", itemId.ToString())) { item.isDeleted = true; if (xData.UpdateTyped("recId", item.recId.ToString(), typeof(oSurfaceItem), item)) { xData.DeleteSurfaceItemFromQueryTable(item.surfaceId, item.recId); xData.DeletePublishedSurfaceItem(item.surfaceId, item.recId); int startIndex = 0; int.TryParse(txbPageNumber.Value, out startIndex); int maxLength = int.Parse(ddSurfaceEntries.SelectedValue); BindSurfaceGrid(startIndex, maxLength); BindSurfaceGridColumnFilters(true); //Show Toastr message //TO DO } } } } catch (Exception ex) { exception.HandleException("surface:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } } /// /// Clone Surface Item /// /// /// protected void lnkClone_Click(object sender, EventArgs e) { try { if (sender.GetType() == typeof(LinkButton)) { LinkButton lnkButton = (LinkButton)sender; RepeaterItem rptItem = (RepeaterItem)lnkButton.Parent.Parent; int itemId = int.Parse(((LinkButton)sender).CommandArgument); if (itemId > 0) { CloneSurface(itemId); } } } catch (Exception ex) { exception.HandleException("surface:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } } /// /// Bulk Update select all checkbox check /// /// /// protected void chkBulkUpdateAll_OnCheckedChanged(object sender, EventArgs e) { try { CheckBox chkBulkUpdateAll = (CheckBox)sender; if (chkBulkUpdateAll != null) { foreach (Control rpt in pnlSurfaceGrid.Controls) { if (rpt.GetType() == typeof(Repeater)) { Repeater repeater = (Repeater)rpt; foreach (RepeaterItem item in repeater.Items) { CheckBox chk = (CheckBox)item.FindControl("chkBulkUpdate"); if (chk != null) chk.Checked = chkBulkUpdateAll.Checked; } } } } } catch (Exception ex) { exception.HandleException("surface:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } } /// /// Repeater Item Created /// /// /// protected void rptSurfaceGrid_ItemCreated(object sender, RepeaterItemEventArgs e) { ScriptManager scriptMan = ScriptManager.GetCurrent(this.Page); LinkButton btnSBFReport = e.Item.FindControl("ApplicantInformation_ApplicantInformation_SBFCandidateReport") as LinkButton; if (btnSBFReport != null) { btnSBFReport.Click += surfaceButton_Click; scriptMan.RegisterPostBackControl(btnSBFReport); } btnSBFReport = e.Item.FindControl("ProfileHeader_SBFCandidateReport") as LinkButton; if (btnSBFReport != null) { btnSBFReport.Click += surfaceButton_Click; scriptMan.RegisterPostBackControl(btnSBFReport); } } /// /// Item Data Bound /// /// /// protected void rptSurfaceGrid_ItemDataBound(object sender, RepeaterItemEventArgs e) { try { oUser user = handler.ReturnUser(); if (e.Item.ItemType == ListItemType.Header) { if (e.Item.FindControl("thUserLink") != null) { HtmlTableCell thUserLink = (HtmlTableCell)e.Item.FindControl("thUserLink"); thUserLink.Visible = base.SurfaceApp.linkUser && user.userType == (int)pNums.UserType.AdminUser; } foreach (oSurfaceField field in MainFieldTable.Select("surfaceFieldTypeId=" + (int)pNums.FieldType.Debtors + "") .AsEnumerable() .Cast()) { if (e.Item.FindControl("th" + field.surfaceFieldName) != null) { HtmlTableCell thDebtors = (HtmlTableCell)e.Item.FindControl("th" + field.surfaceFieldName); thDebtors.Visible = (user.userType >= field.accessLevel && user.userType != (int)pNums.UserType.CustomUser) || (user.mimicUserType >= field.accessLevel && user.userType == (int)pNums.UserType.CustomUser); } } if (e.Item.FindControl("thStatus") != null) { HtmlTableCell thStatus = (HtmlTableCell)e.Item.FindControl("thStatus"); thStatus.Visible = MainGridOptions.showWizardStatus; } if (e.Item.FindControl("thEdit") != null) { HtmlTableCell thEdit = (HtmlTableCell)e.Item.FindControl("thEdit"); thEdit.Visible = MainGridOptions.allowEdit && ((user.userType >= MainGridOptions.editAccessType && user.userType != (int)pNums.UserType.CustomUser) || (user.mimicUserType >= MainGridOptions.editAccessType && user.userType == (int)pNums.UserType.CustomUser)); } if (e.Item.FindControl("thView") != null) { HtmlTableCell thView = (HtmlTableCell)e.Item.FindControl("thView"); thView.Visible = MainGridOptions.allowView && ((user.userType >= MainGridOptions.viewAccessType && user.userType != (int)pNums.UserType.CustomUser) || (user.mimicUserType >= MainGridOptions.viewAccessType && user.userType == (int)pNums.UserType.CustomUser)); } if (e.Item.FindControl("thRemove") != null) { HtmlTableCell thRemove = (HtmlTableCell)e.Item.FindControl("thRemove"); thRemove.Visible = MainGridOptions.allowRemove && ((user.userType >= MainGridOptions.removeAccessType && user.userType != (int)pNums.UserType.CustomUser) || (user.mimicUserType >= MainGridOptions.removeAccessType && user.userType == (int)pNums.UserType.CustomUser)); } if (e.Item.FindControl("thClone") != null) { HtmlTableCell thClone = (HtmlTableCell)e.Item.FindControl("thClone"); thClone.Visible = MainGridOptions.allowClone && ((user.userType >= MainGridOptions.cloneAccessType && user.userType != (int)pNums.UserType.CustomUser) || (user.mimicUserType >= MainGridOptions.cloneAccessType && user.userType == (int)pNums.UserType.CustomUser)); } } if (e.Item.ItemType == ListItemType.Footer) { if (e.Item.FindControl("tfUserLink") != null) { HtmlTableCell tfUserLink = (HtmlTableCell)e.Item.FindControl("tfUserLink"); tfUserLink.Visible = base.SurfaceApp.linkUser && user.userType == (int)pNums.UserType.AdminUser; } foreach (oSurfaceField field in MainFieldTable.Select("surfaceFieldTypeId=" + (int)pNums.FieldType.Debtors + "") .AsEnumerable() .Cast()) { if (e.Item.FindControl("tf" + field.surfaceFieldName) != null) { HtmlTableCell tfDebtors = (HtmlTableCell)e.Item.FindControl("tf" + field.surfaceFieldName); tfDebtors.Visible = (user.userType >= field.accessLevel && user.userType != (int)pNums.UserType.CustomUser) || (user.mimicUserType >= field.accessLevel && user.userType == (int)pNums.UserType.CustomUser); } } if (e.Item.FindControl("tfStatus") != null) { HtmlTableCell tfStatus = (HtmlTableCell)e.Item.FindControl("tfStatus"); tfStatus.Visible = MainGridOptions.showWizardStatus; } if (e.Item.FindControl("tfEdit") != null) { HtmlTableCell tfEdit = (HtmlTableCell)e.Item.FindControl("tfEdit"); tfEdit.Visible = MainGridOptions.allowEdit && ((user.userType >= MainGridOptions.editAccessType && user.userType != (int)pNums.UserType.CustomUser) || (user.mimicUserType >= MainGridOptions.editAccessType && user.userType == (int)pNums.UserType.CustomUser)); } if (e.Item.FindControl("tfView") != null) { HtmlTableCell tfView = (HtmlTableCell)e.Item.FindControl("tfView"); tfView.Visible = MainGridOptions.allowView && ((user.userType >= MainGridOptions.viewAccessType && user.userType != (int)pNums.UserType.CustomUser) || (user.mimicUserType >= MainGridOptions.viewAccessType && user.userType == (int)pNums.UserType.CustomUser)); } if (e.Item.FindControl("tfRemove") != null) { HtmlTableCell tfRemove = (HtmlTableCell)e.Item.FindControl("tfRemove"); tfRemove.Visible = MainGridOptions.allowRemove && ((user.userType >= MainGridOptions.removeAccessType && user.userType != (int)pNums.UserType.CustomUser) || (user.mimicUserType >= MainGridOptions.removeAccessType && user.userType == (int)pNums.UserType.CustomUser)); } if (e.Item.FindControl("tfClone") != null) { HtmlTableCell tfClone = (HtmlTableCell)e.Item.FindControl("tfClone"); tfClone.Visible = MainGridOptions.allowClone && ((user.userType >= MainGridOptions.cloneAccessType && user.userType != (int)pNums.UserType.CustomUser) || (user.mimicUserType >= MainGridOptions.cloneAccessType && user.userType == (int)pNums.UserType.CustomUser)); } } if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { if (base.SurfaceApp.linkUser && e.Item.FindControl("lnkUserLink") != null) { HtmlTableCell tdUserControl = (HtmlTableCell)e.Item.FindControl("tdUserLink"); tdUserControl.Visible = user.userType == (int)pNums.UserType.AdminUser; LinkButton lnkUserLink = (LinkButton)e.Item.FindControl("lnkUserLink"); int surfaceItemId = Convert.ToInt32(lnkUserLink.CommandArgument.ToString()); foreach (oSurfaceItem surfaceItem in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceItem), "recId", surfaceItemId.ToString(), "", "pal_")) { bool userLinked = false; lnkUserLink.Attributes.Remove("title"); foreach (ovUserShared userItem in xData.GetTypedByCriteriaSpecific("recId", typeof(ovUserShared), "recId", surfaceItem.userLink.ToString())) { userLinked = true; lnkUserLink.Attributes.Add("title", userItem.email); } if (!userLinked) { lnkUserLink.Attributes.Add("title", "no link found"); lnkUserLink.CssClass = "fa fa-users palette-remove"; } } } //add any custom logic here LinkButton btnTSPDictated = e.Item.FindControl("PatientInformation_PatientDetails_Dictated") as LinkButton; if (btnTSPDictated != null) { DataTable surfaceItemData = xData.GetSurfaceQueryItemData(base.SurfaceApp.recId, Convert.ToInt32(btnTSPDictated.CommandArgument.ToString())); DataRow surfaceItemRow = surfaceItemData.Rows[0]; btnTSPDictated.Text = " "; btnTSPDictated.AddCssClass("padding12"); btnTSPDictated.RemoveCssClass("btn-danger"); if (surfaceItemRow["PatientProfileHeader_Dictated"].ToString() == "1") { btnTSPDictated.AddCssClass("btn-success"); } else { btnTSPDictated.AddCssClass("btn-danger"); } } LinkButton btnTSPSent = e.Item.FindControl("PatientInformation_PatientDetails_Sent") as LinkButton; if (btnTSPSent != null) { DataTable surfaceItemData = xData.GetSurfaceQueryItemData(base.SurfaceApp.recId, Convert.ToInt32(btnTSPSent.CommandArgument.ToString())); DataRow surfaceItemRow = surfaceItemData.Rows[0]; btnTSPSent.Text = " "; btnTSPSent.AddCssClass("padding12"); btnTSPSent.RemoveCssClass("btn-danger"); if (surfaceItemRow["PatientProfileHeader_Sent"].ToString() == "1") { btnTSPSent.AddCssClass("btn-success"); } else { btnTSPSent.AddCssClass("btn-danger"); } } } } catch (Exception ex) { exception.HandleException("surface:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } } protected void rptSurfaceGrid_PreRender(object sender, EventArgs e) { //Repeater rep = (Repeater)sender; //if (rep.Items.Count == 0) // ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "setNoSurfaceRecords", "setNoSurfaceRecords(true);", true); //else // ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "setNoSurfaceRecords", "setNoSurfaceRecords(false);", true); } /// /// Save Row click /// /// /// protected void lnkSaveRow_Click(object sender, EventArgs e) { try { if (sender.GetType() == typeof(LinkButton)) { LinkButton lnkButton = (LinkButton)sender; //CVH 2017-02-09 Get Parent.Parent, Parent is td RepeaterItem rptItem = (RepeaterItem)lnkButton.Parent.Parent; oSurfaceItem item = new oSurfaceItem(); ArrayList surfaceDataList = new ArrayList(); if (base.SurfaceApp != null) { /* CVH 2016-02-02 Enable batch editing */ if (base.SurfaceAppGridEditTypeId == (int)pNums.SurfaceGridEditType.Batch) { SaveSurfaceGrid((Repeater)rptItem.Parent, base.SurfaceApp.recId); } else { oSurface surfaceApp = base.SurfaceApp; if (base.SurfaceAppItem != null)//update { item = base.SurfaceAppItem; SaveSurfaceRow(ref item, ref surfaceDataList, rptItem); if (xData.UpdateTyped("recId", item.recId.ToString(), typeof(oSurfaceItem), item)) { xData.UpdateTypedCollection("recId", typeof(oSurfaceFieldData), surfaceDataList); //save to query table xData.SaveSurfaceItemToQueryTable(item.surfaceId, item.recId, true); base.SurfaceAppItem = item; base.SurfaceAppItemId = item.recId; ToggleRowEdit(item.recId, item, false, rptItem); } } } if (rptItem.Parent != null && rptItem.Parent.GetType() == typeof(Repeater)) { KeepSelectedGridTab((Repeater)rptItem.Parent); } int startIndex = 0; int.TryParse(txbPageNumber.Value, out startIndex); int maxLength = int.Parse(ddSurfaceEntries.SelectedValue); BindSurfaceGrid(startIndex, maxLength); BindSurfaceGridColumnFilters(true); } } } catch (Exception ex) { exception.HandleException("surface:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } } /// /// Cancel Event for the row /// /// /// protected void lnkCancel_Click(object sender, EventArgs e) { try { if (sender.GetType() == typeof(LinkButton)) { /* CVH 2016-02-02 Enable batch editing */ if (base.SurfaceAppGridEditTypeId == (int)pNums.SurfaceGridEditType.Batch) { int startIndex = 0; int.TryParse(txbPageNumber.Value, out startIndex); int maxLength = int.Parse(ddSurfaceEntries.SelectedValue); BindSurfaceGrid(startIndex, maxLength); } else { LinkButton lnkButton = (LinkButton)sender; RepeaterItem rptItem = (RepeaterItem)lnkButton.Parent.Parent; oSurfaceItem item = new oSurfaceItem(); ArrayList surfaceDataList = new ArrayList(); if (base.SurfaceApp != null) { oSurface surfaceApp = base.SurfaceApp; if (base.SurfaceAppItem != null)//update { item = base.SurfaceAppItem; ToggleRowEdit(item.recId, item, false, rptItem); } } if (rptItem.Parent.GetType() == typeof(Repeater)) { KeepSelectedGridTab((Repeater)rptItem.Parent); } } } } catch (Exception ex) { exception.HandleException("surface:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } } protected void ddlCompare_SelectedIndexChanged(object sender, EventArgs e) { try { DropDownList list = (DropDownList)sender; int columnNumber = Convert.ToInt32(list.ID.Substring(list.ID.IndexOf('_') + 1, 1)); string listSurfaceItemId = list.SelectedValue; //surfaceItemId string surfaceField = ""; if (list.ID.Length - list.ID.Replace("__", "").Length > 2) { surfaceField = list.ID.Substring(list.ID.LastIndexOf("__") + 2); } foreach (oSurfaceItem surfaceItem in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceItem), "recId", listSurfaceItemId)) { //PopulateSurfaceCompareView(surfaceItem, columnNumber, surfaceField); break; } } catch (Exception ex) { exception.HandleException("surface:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } } /// /// MSV method /// /// /// protected void btnMediswitch_Click(object sender, EventArgs e) { ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "modMediSwitchMSV", "$('#modMediSwitchMSV" + base.SurfaceApp.name + "').modal();", true); } /// /// Debtors method /// /// /// protected void btnDebtors_Click(object sender, EventArgs e) { if (base.SurfaceApp != null) { int itemId = int.Parse(((LinkButton)sender).CommandArgument); oUser usr = new oUser(); if (utils.verifySession("user")) { usr = (oUser)Session["user"]; } //CVH 2016-11-17 Set the Debtors button field name, used when linking notes to surface string fieldName = ""; foreach (oSurfaceField field in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceField), "surfaceId,surfaceFieldTypeId,isActive", base.SurfaceApp.recId + "," + (int)pNums.FieldType.Note + ",1")) { fieldName = field.surfaceFieldName; break; } Session["noteSurfaceFieldName"] = fieldName; Session["account"] = xDebtors.SetAccountItem(itemId, base.SurfaceApp.recId, usr); Session["loadType"] = "Redirected"; //redirect to debtors Response.Redirect("/pages/enquiry", false); } } protected void btnComposite_Click(object sender, EventArgs e) { if (base.SurfaceApp != null) { int itemId = int.Parse(((LinkButton)sender).CommandArgument); string profilePage = string.Empty; foreach (oSurfaceField surfaceField in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceField), "surfaceFieldName", ((LinkButton)sender).ID)) { foreach (oCanvas canvas in xData.GetTypedByCriteriaSpecific("recId", typeof(oCanvas), "recId", surfaceField.contentId.ToString())) { profilePage = canvas.name; } } Session["surfaceItemId"] = itemId; //redirect to composite if (profilePage != string.Empty) Response.Redirect("/pages/" + profilePage, false); } } /// /// Close button method /// /// /// protected void btnClose_Click(object sender, EventArgs e) { try { Response.Redirect(Request.Url.AbsoluteUri.Split('?')[0], false); } catch (Exception ex) { exception.HandleException("Master:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } } /// /// /// /// /// protected void btnSales_Click(object sender, EventArgs e) { if (base.SurfaceApp != null) { if (((LinkButton)sender).CommandArgument != "") { int itemId = int.Parse(((LinkButton)sender).CommandArgument); Session["sales"] = xSales.SetSalesContact(itemId); //redirect to debtors Response.Redirect("/pages/sales", false); } } } protected void lnkGridView_Click(object sender, EventArgs e) { TogglePanels("pnlSurfaceGrid"); lnkCompareView.Visible = true; lnkGridView.Visible = false; if (this.SurfaceApp.isModal) ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "hideSurfaceModal", "CloseAllModals();", true); } protected void lnkCompareView_Click(object sender, EventArgs e) { TogglePanels("pnlSurfaceCompare"); lnkCompareView.Visible = false; lnkGridView.Visible = true; if (base.SurfaceApp != null) { BindCompareDropdowns(base.SurfaceApp); } } protected void CheckBox_FixAutoPostBack_OnPreRender(object sender, EventArgs e) { CheckBox checkBox = (CheckBox)sender; Panel label = (Panel)checkBox.Parent; // Set onclick handler of the parent label to be the same as the radio button. // This fixes issues caused by bootstrap javascript which adds labels. label.Attributes.Add("onclick", "javascript:setTimeout('__doPostBack(\\'" + checkBox.UniqueID + "\\',\\'\\')', 0)"); } /// /// Edit Surface Item /// /// /// protected void lnkEditCompare_Click(object sender, EventArgs e) { try { if (sender.GetType() == typeof(LinkButton)) { LinkButton lnk = (LinkButton)sender; string ddlID = lnk.ID.Replace("lnkEdit", "ddlCompare"); if (pnlSurfaceCompare.FindControl(ddlID) != null) { DropDownList ddl = (DropDownList)pnlSurfaceCompare.FindControl(ddlID); int listSurfaceItemId = Convert.ToInt32(ddl.SelectedValue); //surfaceItemId EditSurface(listSurfaceItemId, null); } } } catch (Exception ex) { exception.HandleException("surface:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } } /// /// Clone Compare Surface Item /// /// /// protected void lnkCloneCompare_Click(object sender, EventArgs e) { try { if (sender.GetType() == typeof(LinkButton)) { LinkButton lnk = (LinkButton)sender; string ddlID = lnk.ID.Replace("lnkClone", "ddlCompare"); if (pnlSurfaceCompare.FindControl(ddlID) != null) { DropDownList ddl = (DropDownList)pnlSurfaceCompare.FindControl(ddlID); int listSurfaceItemId = Convert.ToInt32(ddl.SelectedValue); //surfaceItemId CloneSurface(listSurfaceItemId); } } } catch (Exception ex) { exception.HandleException("surface:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } } /// /// Clone Child item from compare /// /// /// protected void lnkCloneCompareChild_Click(object sender, EventArgs e) { LinkButton lnk = (LinkButton)sender; string ddlID = lnk.ID.Replace("lnkClone", "ddlCompare"); if (pnlSurfaceCompare.FindControl(ddlID) != null) { DropDownList ddl = (DropDownList)pnlSurfaceCompare.FindControl(ddlID); int listSurfaceItemId = Convert.ToInt32(ddl.SelectedValue); //surfaceItemId //EditChild(listSurfaceItemId, null, true); } } #endregion #region note and file handling /// /// Notes event from the grid /// /// /// protected void btnNotes_Click(object sender, EventArgs e) { if (base.SurfaceApp != null) { //setup notes oSurfaceFieldData controlFieldData = new oSurfaceFieldData(); int itemId = 0, fieldId = 0; string lnkNote = "lnkNote_"; if (sender.GetType() == typeof(LinkButton)) { int.TryParse(((LinkButton)sender).CommandArgument, out itemId); int.TryParse(((LinkButton)sender).ID.Substring(lnkNote.Length), out fieldId); } if (itemId == 0) { if (base.SurfaceAppItemId > 0) itemId = base.SurfaceAppItemId; } if (controlFieldData.surfaceFieldID == 0) //set default values if populating blank form { controlFieldData.surfaceFieldID = fieldId; controlFieldData.surfaceItemId = itemId; controlFieldData.surfaceId = base.SurfaceApp.recId; } if (itemId > 0) { dynamic moduleControl = this.FindControl("notes"); if (moduleControl != null) { moduleControl.ReloadControl(controlFieldData); ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "myNotesModal", "$('#modNotes" + base.SurfaceApp.name + "').modal();", true); } //Session["noteModuleId"] = (int)pNums.Module.Surface; //Session["noteEntityId"] = itemId; //Session["fieldNameNote"] = fieldName; //IControlBase notes = (IControlBase)this.FindControl("notes"); //notes.ReloadControl(); //ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "myNotesModal", "$('#modNotes" + base.SurfaceApp.name + "').modal();", true); } } } /// /// Atatchments event from Grid /// /// /// protected void btnAttachments_Click(object sender, EventArgs e) { if (base.SurfaceApp != null) { //setup attachments int itemId = 0; string fieldName = String.Empty; if (sender.GetType() == typeof(LinkButton)) { int.TryParse(((LinkButton)sender).CommandArgument, out itemId); fieldName = ((LinkButton)sender).ID; } if (itemId == 0) { if (base.SurfaceAppItemId > 0) itemId = base.SurfaceAppItemId; } if (itemId > 0) { Session["moduleId"] = (int)pNums.Module.Surface; Session["entityId"] = itemId; Session["fieldNameFile"] = fieldName; IControlBase files = (IControlBase)this.FindControl("files"); files.ReloadControl(); ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "myModalFiles", "$('#modFiles" + base.SurfaceApp.name + "').modal();", true); } } } /// /// Get file type image /// /// /// private string GetFileTypeImage(string fileLocation) { string imgSrc = "/images/doc.png"; try { //string uri = String.Empty; //if (fileLocation.Contains("http")) // uri = fileLocation; //else // uri = Server.MapPath("~" + fileLocation); System.Drawing.Icon icon = System.Drawing.Icon.ExtractAssociatedIcon(fileLocation); if (icon != null) { System.Drawing.Image img = icon.ToBitmap(); byte[] byteArray = new byte[0]; using (System.IO.MemoryStream stream = new System.IO.MemoryStream()) { img.Save(stream, System.Drawing.Imaging.ImageFormat.Png); stream.Close(); byteArray = stream.ToArray(); } string base64 = Convert.ToBase64String(byteArray); imgSrc = String.Format("data:image/png;base64,{0}", base64); } } catch { //do nothing if it fails } return imgSrc; } /// /// Bind Attachments /// /// /// private void BindAttachments(int itemId, HtmlGenericControl parentControl, string fieldName) { try { oSetup _setup = handler.ReturnSetup(); System.Text.StringBuilder formbuilder = new System.Text.StringBuilder(); //CVH 2017-01-17 Calling this method for attachment as Label also // fieldName = parentControl.ID.Replace("LabelfAttachments", ""); //else // fieldName = parentControl.ID.Replace("fAttachments", "").Replace("vAttachments", ""); ArrayList files = xData.GetTypedByCriteriaSpecific("recId", typeof(oAttachment), "moduleId,entityId,fieldName", (int)pNums.Module.Surface + "," + itemId.ToString() + "," + fieldName, "dateSaved DESC"); if (files.Count > 0) { formbuilder.AppendLine("
"); //get all attachments linked to this event foreach (oAttachment att in files) { string user = ""; foreach (ovUserShared usr in xData.GetTypedByCriteriaSpecific("recId", typeof(ovUserShared), "recId", att.userIdSaved.ToString())) { user = usr.name; break; } string details = "(" + user + " - " + utils.fixDate(att.dateSaved) + ")"; string fileLocation = ""; string pathLocation = ""; string hyperlink = ""; if (att.typeId == (int)pNums.AttachmentType.Document) { fileLocation = Server.MapPath("~/upload/" + att.folderName + "/file/" + att.fileName); pathLocation = att.sourcePath + "/upload/" + att.folderName + "/file/" + att.fileName; if (!File.Exists(fileLocation)) { fileLocation = fileLocation.Replace("/file", ""); pathLocation = pathLocation.Replace("/file", ""); } hyperlink = "" + att.display + ""; } else { fileLocation = Server.MapPath("~/upload/" + att.folderName + "/image/" + att.fileName); pathLocation = att.sourcePath + "/upload/" + att.folderName + "/image/" + att.fileName; hyperlink = "" + att.display + ""; } formbuilder.AppendLine(hyperlink); } formbuilder.AppendLine("
"); } parentControl.InnerHtml = formbuilder.ToString(); } catch (Exception ex) { exception.HandleException("Task:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } } /// /// Bind Notes /// /// /// private void BindNotes(int itemId, HtmlGenericControl parentControl) { try { parentControl.InnerHtml = ""; ArrayList surfNotes = new ArrayList(); //CVH 2017-01-17 Calling this method for attachment as Label also string fieldName = ""; if (parentControl.ID.IndexOf("LabelfNotes") > 0) fieldName = parentControl.ID.Replace("LabelfNotes", ""); else fieldName = parentControl.ID.Replace("fNotes", "").Replace("vNotes", ""); //get list of all notes linked to this history item foreach (oNote note in xData.GetTypedByCriteriaSpecific("recId", typeof(oNote), "moduleId,entityId,typeId", (int)pNums.Module.Surface + "," + itemId.ToString() + "," + (int)pNums.NoteType.General, "")) { surfNotes.Add(note); } //order notes by date if (surfNotes == null || surfNotes.Count <= 0) return; var notes = surfNotes.OfType().OrderByDescending(n => n.dateSaved).ToArray(); System.Text.StringBuilder formBuilder = new System.Text.StringBuilder(); bool firstNote = true; //loop through notes, get attachment linked to note, and add to form foreach (oNote noteAdd in notes) { //start of group formBuilder.Append("
"); //heading formBuilder.AppendLine("
"); formBuilder.AppendLine(noteAdd.title); formBuilder.AppendLine(""); formBuilder.AppendLine(""); formBuilder.AppendLine(""); formBuilder.AppendLine("
"); //end of heading //toggle panel if (firstNote) { formBuilder.AppendLine("
"); firstNote = false; } else { formBuilder.AppendLine("
"); } //build body of formBuilder.AppendLine("
"); //build horizontal form formBuilder.AppendLine("
"); formBuilder.AppendLine("
"); formBuilder.AppendLine("
"); //row formBuilder.AppendLine("
"); if (noteAdd.customValue != string.Empty) { formBuilder.AppendLine("
"); foreach (oNoteType noteType in xData.GetTypedByCriteriaSpecific("recId", typeof(oNoteType), "recId", noteAdd.typeId.ToString())) { formBuilder.AppendLine("" + noteType.customItem + ": "); } formBuilder.AppendLine(noteAdd.customValue + "
"); } formBuilder.AppendLine("
" + noteAdd.caption + "
"); //get all attachments linked to note ArrayList files = xData.GetTypedByCriteriaSpecific("recId", typeof(oAttachment), "moduleId,entityId", (int)pNums.Module.Notes + "," + noteAdd.recId.ToString(), ""); if (files.Count > 0) { formBuilder.AppendLine("
"); foreach (oAttachment att in files) { string user = ""; foreach (ovUserShared usr in xData.GetTypedByCriteriaSpecific("recId", typeof(ovUserShared), "recId", att.userIdSaved.ToString())) { user = usr.name; break; } string details = "(" + user + " - " + utils.fixDate(att.dateSaved) + ")"; string fileLocation = ""; string pathLocation = ""; string hyperlink = ""; if (att.typeId == (int)pNums.AttachmentType.Document) { fileLocation = Server.MapPath("~/upload/" + att.folderName + "/file/" + att.fileName); pathLocation = att.sourcePath + "/upload/" + att.folderName + "/file/" + att.fileName; if (!File.Exists(fileLocation)) { fileLocation = fileLocation.Replace("/file", ""); pathLocation = pathLocation.Replace("/file", ""); } hyperlink = "" + att.display + ""; } else { fileLocation = Server.MapPath("~/upload/" + att.folderName + "/image/" + att.fileName); pathLocation = att.sourcePath + "/upload/" + att.folderName + "/image/" + att.fileName; hyperlink = "" + att.display + ""; } formBuilder.AppendLine(hyperlink); } formBuilder.AppendLine("
"); } formBuilder.AppendLine("
"); //end of row //end of horizontal formBuilder.AppendLine("
"); formBuilder.AppendLine("
"); formBuilder.AppendLine("
"); formBuilder.AppendLine("
"); //end of body formBuilder.AppendLine("
"); //end toggle panel formBuilder.AppendLine("
"); //end of group } parentControl.InnerHtml = formBuilder.ToString(); } catch (Exception ex) { exception.HandleException("Task:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } } /// /// Add Attachments /// /// /// protected void btnfAddFile_Click(object sender, EventArgs e) { string fieldName = ((LinkButton)sender).ID; hfFieldNameFile.Value = fieldName; ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "myfFileModalScroll", " $(\"#modChildApp\").scrollTop(0);", true); ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "myfFileModalScrollSub", " $(\"#modChildAppSub\").scrollTop(0);", true); //ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "myfFileModalScroll", "$('#modAddFile" + base.SurfaceApp.name + "').on('shown', function () {$(\"#scrtop" + base.SurfaceApp.name + "\").scrollTop(0);});", true); ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "myfFileModal", "$('#modAddFile" + base.SurfaceApp.name + "').modal();", true); upAddFile.Update(); } /// /// Add notes /// /// /// protected void btnfAddNotes_Click(object sender, EventArgs e) { lblNoteTypeCustom.Text = string.Empty; divNoteCustom.Visible = false; radNewNote.Content = ""; string fieldName = ((LinkButton)sender).ID; hfFieldNameNote.Value = fieldName; ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "myfNoteModalScroll", " $(\"#modChildApp\").scrollTop(0);", true); ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "myfNoteModalScrollSub", " $(\"#modChildAppSub\").scrollTop(0);", true); //ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "myfFileModalScroll", "$('#modAddNote" + base.SurfaceApp.name + "').on('shown', function () {$(\"#scrtop" + base.SurfaceApp.name + "\").scrollTop(0);});", true); ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "myfNoteModal", "$('#modAddNote" + base.SurfaceApp.name + "').modal();", true); upAddNote.Update(); } /// /// File Uploaded /// /// /// protected void radUpload_FileUploaded(object sender, FileUploadedEventArgs e) { oAttachment Attachment = new oAttachment(); try { oUser usr = new oUser(); if (utils.verifySession("user")) usr = (oUser)Session["user"]; else { ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "userAlert", "alert('No user login detected. Operation aborted.');", true); return; } //if (base.SurfaceAppItemId == 0) //{ // if (!PerformSave(false, false)) // return; //} int itemId = base.SurfaceAppItemId; Attachment.entityId = itemId; Attachment.fieldName = hfFieldNameFile.Value; Attachment.moduleId = (int)pNums.Module.Surface; Attachment.isActive = true; Attachment.typeId = e.File.ContentType.StartsWith("image") ? (int)pNums.AttachmentType.Image : (int)pNums.AttachmentType.Document; string surfFolderName = "surface/"; surfFolderName += itemId.ToString(); Attachment.folderName = surfFolderName; /* CVH 2016-04-15 Add date and user */ int userId = usr.recId; if (Attachment.recId > 0) { Attachment.userIdUpdated = userId; Attachment.dateUpdated = System.DateTime.Now; } else { Attachment.userIdSaved = userId; Attachment.dateSaved = System.DateTime.Now; } Attachment.display = e.File.FileName.Remove(e.File.FileName.LastIndexOf(".")); Attachment.fileName = Attachment.entityId + "_" + utils.RandomString(9, true) + e.File.FileName.Substring(e.File.FileName.LastIndexOf(".")); string imagePath = Server.MapPath("~/upload/" + Attachment.folderName + "/image/"); string thumbPath = Server.MapPath("~/upload/" + Attachment.folderName + "/thumb/"); string tempPath = Server.MapPath("~/upload/" + Attachment.folderName + "/temp/"); string filePath = Server.MapPath("~/upload/" + Attachment.folderName + "/file/"); utils.validateFolder(imagePath); utils.validateFolder(thumbPath); utils.validateFolder(tempPath); utils.validateFolder(filePath); Attachment.sourcePath = ConfigurationManager.AppSettings["WebAddy"]; if (Attachment.typeId == (int)pNums.AttachmentType.Image) { //upload file e.File.SaveAs(tempPath + Attachment.fileName); //resize and crop for thumbnail utils.ResizeCropImagePrecise(tempPath + Attachment.fileName, thumbPath, Attachment.fileName, 383, 264, false); //resize image for a larger size utils.ResizeImage(tempPath + Attachment.fileName, imagePath, Attachment.fileName, 400, true, true); } else { //upload file e.File.SaveAs(filePath + Attachment.fileName); } if (Attachment.recId > 0) { xData.UpdateTyped("recId", Attachment.recId.ToString(), typeof(oAttachment), Attachment); utils.disposeSession("Attachment"); } else { Attachment.recId = xData.SaveTyped("recId", typeof(oAttachment), Attachment); if (Attachment.recId > 0) { } } } catch (Exception ex) { exception.HandleException("Attachments:", MethodBase.GetCurrentMethod().Name, ex, Session["attachment"]); Response.Redirect("/error", false); } } /// /// File Notes uploaded /// /// /// protected void radUploadNotes_FileUploaded(object sender, FileUploadedEventArgs e) { oAttachment Attachment = new oAttachment(); try { oUser user = new oUser(); if (utils.verifySession("user")) user = (oUser)Session["user"]; else { ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "userAlert", "alert('No user login detected. Operation aborted.');", true); return; } oNote note = new oNote(); if (ViewState["newNote"] == null) { //if (base.SurfaceAppItemId == 0) //{ // if (!PerformSave(false, false)) // return; //} int itemId = base.SurfaceAppItemId; //save new note to link attachment to note.caption = radNewNote.Content; note.dateSaved = System.DateTime.Now; note.entityId = itemId; note.fieldName = hfFieldNameNote.Value; note.isActive = true; note.moduleId = (int)pNums.Module.Surface; note.title = user.name + " (" + utils.fixDate(System.DateTime.Now) + ")"; note.typeId = (int)pNums.NoteType.General; note.userIdSaved = user.recId; if (ddNoteCustom.SelectedItem != null) note.customValue = ddNoteCustom.SelectedItem.Text; note.recId = xData.SaveTyped("recId", typeof(oNote), note); ViewState["newNote"] = note; } else { note = (oNote)ViewState["newNote"]; } Attachment.entityId = note.recId; Attachment.fieldName = hfFieldNameNote.Value; Attachment.moduleId = (int)pNums.Module.Notes; Attachment.isActive = true; Attachment.typeId = e.File.ContentType.StartsWith("image") ? (int)pNums.AttachmentType.Image : (int)pNums.AttachmentType.Document; string taskFolderName = "surface/"; taskFolderName += this.SurfaceAppItem.recId.ToString(); Attachment.folderName = taskFolderName; /* CVH 2016-04-15 Add date and user */ int userId = user.recId; if (Attachment.recId > 0) { Attachment.userIdUpdated = userId; Attachment.dateUpdated = System.DateTime.Now; } else { Attachment.userIdSaved = userId; Attachment.dateSaved = System.DateTime.Now; } Attachment.display = e.File.FileName.Remove(e.File.FileName.LastIndexOf(".")); Attachment.fileName = Attachment.entityId + "_" + utils.RandomString(9, true) + e.File.FileName.Substring(e.File.FileName.LastIndexOf(".")); string imagePath = Server.MapPath("~/upload/" + Attachment.folderName + "/image/"); string thumbPath = Server.MapPath("~/upload/" + Attachment.folderName + "/thumb/"); string tempPath = Server.MapPath("~/upload/" + Attachment.folderName + "/temp/"); string filePath = Server.MapPath("~/upload/" + Attachment.folderName + "/file/"); utils.validateFolder(imagePath); utils.validateFolder(thumbPath); utils.validateFolder(tempPath); utils.validateFolder(filePath); Attachment.sourcePath = ConfigurationManager.AppSettings["WebAddy"]; if (Attachment.typeId == (int)pNums.AttachmentType.Image) { //upload file e.File.SaveAs(tempPath + Attachment.fileName); //resize and compress utils.ResizeImage(tempPath + Attachment.fileName, imagePath, Attachment.fileName, 400, true); //resize and crop utils.ResizeCropImagePrecise(imagePath + Attachment.fileName, thumbPath, Attachment.fileName, 383, 264, false); } else { //upload file e.File.SaveAs(filePath + Attachment.fileName); } if (Attachment.recId > 0) { xData.UpdateTyped("recId", Attachment.recId.ToString(), typeof(oAttachment), Attachment); utils.disposeSession("Attachment"); } else { Attachment.recId = xData.SaveTyped("recId", typeof(oAttachment), Attachment); if (Attachment.recId > 0) { } } } catch (Exception ex) { exception.HandleException("surface:", MethodBase.GetCurrentMethod().Name, ex, Session["attachment"]); Response.Redirect("/error", false); } } /// /// Cancel Click /// /// /// protected void btnCancelNote_Click(object sender, EventArgs e) { //to do find all controls that are notes / attachments and bind //if (base.SurfaceAppItemId != 0) //{ // BindSurfaceNotes(base.SurfaceAppItemId, pnlSurfaceView.Visible); // //BindSurfaceAttachments(base.SurfaceAppItemId); //} //ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "myfNoteModalClose", "$('.modal-backdrop').remove(); $('body').removeClass('modal-open');", true); } /// /// Save the surface note /// /// /// protected void btnSaveNote_Click(object sender, EventArgs e) { try { oUser user = new oUser(); if (utils.verifySession("user")) { user = (oUser)Session["user"]; } else { Response.Redirect("/home", false); return; //throw new Exception("Logged on user could not be determined."); } //if viewstate is null, no attachment has been linked to this note, and the note hasn't been saved yet, save it now if (ViewState["newNote"] == null) { //if (base.SurfaceAppItemId == 0) //{ // if (!PerformSave(false, false)) // return; //} int itemId = base.SurfaceAppItemId; oNote note = new oNote(); note.caption = radNewNote.Content; note.dateSaved = System.DateTime.Now; note.entityId = itemId; note.isActive = true; note.moduleId = (int)pNums.Module.Surface; note.title = user.name + " (" + utils.fixDate(System.DateTime.Now) + ")"; note.fieldName = hfFieldNameNote.Value; note.typeId = (int)pNums.NoteType.General; note.userIdSaved = user.recId; note.recId = xData.SaveTyped("recId", typeof(oNote), note); } else ViewState["newNote"] = null; } catch (Exception ex) { exception.HandleException("Attachments:", MethodBase.GetCurrentMethod().Name, ex, Session["attachment"]); Response.Redirect("/error", false); } } #endregion #region properties public Dictionary SurfaceGridTotals { get { if (ViewState["totalsDictionary"] == null) return new Dictionary(); else return (Dictionary)ViewState["totalsDictionary"]; } set { ViewState["totalsDictionary"] = value; } } public Dictionary SurfaceGridAverages { get { if (ViewState["averagesDictionary"] == null) return new Dictionary(); else return (Dictionary)ViewState["averagesDictionary"]; } set { ViewState["averagesDictionary"] = value; } } public oSurfaceGridOptions MainGridOptions { get { if (ViewState["mainGridOptions"] == null) { oSurfaceGridOptions gridOptions = new oSurfaceGridOptions(); foreach (oSurfaceGridOptions gridOptionsItem in xData.GetTypedByCriteriaSpecific("redId", typeof(oSurfaceGridOptions), "surfaceId", base.SurfaceApp.recId.ToString())) { gridOptions = gridOptionsItem; } return gridOptions; } else return (oSurfaceGridOptions)ViewState["mainGridOptions"]; } set { ViewState["mainGridOptions"] = value; } } public ArrayList MainSurface { get { if (ViewState["mainSurface"] == null) return xData.GetTypedByCriteriaSpecific("recId", typeof(oSurface), "recId", base.SurfaceApp.recId.ToString()); else return (ArrayList)ViewState["mainSurface"]; } } public DataTable MainFieldTable { get { if (ViewState["mainFieldTable"] == null) return xData.GetTypedByCriteriaSpecificTable("recId", typeof(oSurfaceField), "surfaceId,isActive", base.SurfaceApp.recId.ToString() + ",0", "surfaceId"); else return (DataTable)ViewState["mainFieldTable"]; } set { ViewState["mainFieldTable"] = value; } } public DataTable ChildFieldTable { get { if (ViewState["childFieldTable"] == null) return xData.GetTypedByCriteriaSpecificTable("recId", typeof(oSurfaceField), "surfaceId,isActive", base.ParentSurfaceId + ",1", "sequence"); else return (DataTable)ViewState["childFieldTable"]; } set { ViewState["childFieldTable"] = value; } } public DataTable SuburbTable { get { if (ViewState["suburbTable"] == null) { DataTable dtSuburbs = new DataTable(); foreach (oSurfaceLookupCategory cat in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceLookupCategory), "lookupCategory,isActive", "Suburbs,1")) { dtSuburbs = xData.GetTypedByCriteriaSpecificTable("recId", typeof(oSurfaceLookup), "categoryId,isActive", cat.recId.ToString() + ",1"); } return dtSuburbs; } else return (DataTable)ViewState["suburbTable"]; } } public oUser User { get { return handler.ReturnUser(); } set { Session["user"] = value; } } #endregion }