using framework_library; using System; using System.Collections; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.IO; using System.Linq; using System.Reflection; using System.Text; using System.Web; namespace framework_business { /// /// Summary description for surfaceHandler /// public class surfaceHandler { public surfaceHandler() { // // TODO: Add constructor logic here // } /// /// Build Surface App Template /// /// /// /// REVISION 001: Add optional parameter to build unique Validators per surface app - required for multi surface app /// AUTHOR: Charlene van Heerden\ /// DATE MODIFIED: 17 December 2015 public static bool BuildSurfaceAppTemplate(oSurface surface, string sourceTemplateControl, string destinationPath, bool uniqueValidationRequired = false) { bool result = false; string paramLists = string.Empty; try { //check if folder exists utils.validateFolder(HttpContext.Current.Server.MapPath(destinationPath)); string codeFront = utils.ConvertHTMLFiletoString(HttpContext.Current.Server.MapPath(sourceTemplateControl)); string codeFront_grid = utils.ConvertHTMLFiletoString(HttpContext.Current.Server.MapPath(sourceTemplateControl.Replace(".ascx", "_grid.ascx"))); string codeFront_form = utils.ConvertHTMLFiletoString(HttpContext.Current.Server.MapPath(sourceTemplateControl.Replace(".ascx", "_form.ascx"))); string codeFront_view = utils.ConvertHTMLFiletoString(HttpContext.Current.Server.MapPath(sourceTemplateControl.Replace(".ascx", "_view.ascx"))); oSurfaceGridOptions gridOptions = new global::oSurfaceGridOptions(); foreach (oSurfaceGridOptions gridOpts in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceGridOptions), "surfaceId", surface.recId.ToString())) { gridOptions = gridOpts; break; } //setup Heading codeFront = codeFront.Replace("{Heading}", surface.surface); codeFront_grid = codeFront_grid.Replace("{Heading}", surface.surface); codeFront_form = codeFront_form.Replace("{Heading}", surface.surface); codeFront_view = codeFront_view.Replace("{Heading}", surface.surface); //setup surface name in hidden field - used for tabs codeFront = codeFront.Replace("{SurfaceName}", surface.name); codeFront_grid = codeFront_grid.Replace("{SurfaceName}", surface.name); codeFront_form = codeFront_form.Replace("{SurfaceName}", surface.name); codeFront_view = codeFront_view.Replace("{SurfaceName}", surface.name); //CVH 2017-01-25 Build Surface Column Filter codeFront = codeFront.Replace("<%--{SurfaceGridColumnFilter}--%>", gridOptions.allowFilter ? SurfaceGridColumnFilter(surface, gridOptions.iconsAsText) : ""); codeFront_grid = codeFront_grid.Replace("<%--{SurfaceGridColumnFilter}--%>", gridOptions.allowFilter ? SurfaceGridColumnFilter(surface, gridOptions.iconsAsText) : ""); //build Surface Grid codeFront = codeFront.Replace("<%--{SurfaceGrid}--%>", BuildSurfaceGrid(surface, false, false)); codeFront_grid = codeFront_grid.Replace("<%--{SurfaceGrid}--%>", BuildSurfaceGrid(surface, false, false)); //setup grid options codeFront = SetButtonVisibility(codeFront, surface, false, false); codeFront_grid = SetButtonVisibility(codeFront_grid, surface, false, false); codeFront_form = SetButtonVisibility(codeFront_form, surface, false, false); codeFront_view = SetButtonVisibility(codeFront_view, surface, false, true); //build compare view if (surface.isComparable) { codeFront = codeFront.Replace("<%--{SurfaceCompare}--%>", BuildSurfaceCompare(surface)); codeFront_grid = codeFront_grid.Replace("<%--{SurfaceCompare}--%>", BuildSurfaceCompare(surface)); codeFront_form = codeFront_form.Replace("<%--{SurfaceCompare}--%>", BuildSurfaceCompare(surface)); codeFront_view = codeFront_view.Replace("<%--{SurfaceCompare}--%>", BuildSurfaceCompare(surface)); } else { codeFront = codeFront.Replace("<%--{SurfaceCompare}--%>", ""); codeFront_grid = codeFront_grid.Replace("<%--{SurfaceCompare}--%>", ""); codeFront_form = codeFront_form.Replace("<%--{SurfaceCompare}--%>", ""); codeFront_view = codeFront_view.Replace("<%--{SurfaceCompare}--%>", ""); } string valSummaryTabs = ""; //build surface form codeFront = codeFront.Replace("<%--{SurfaceForm}--%>", BuildSurfaceForm(surface, false, ref valSummaryTabs)); codeFront_form = codeFront_form.Replace("<%--{SurfaceForm}--%>", BuildSurfaceForm(surface, false, ref valSummaryTabs)); //CVH 2017-01-09 Add validation summary per tab codeFront = codeFront.Replace("<%--{SurfaceValSummaryTabs}--%>", valSummaryTabs); codeFront_form = codeFront_form.Replace("<%--{SurfaceValSummaryTabs}--%>", valSummaryTabs); //build view mode codeFront = codeFront.Replace("<%--{SurfaceView}--%>", BuildSurfaceForm(surface, true, ref valSummaryTabs)); codeFront_view = codeFront_view.Replace("<%--{SurfaceView}--%>", BuildSurfaceForm(surface, true, ref valSummaryTabs)); /* CVH 2016-08-29 Build surface modal */ codeFront = codeFront.Replace("<%--{ModalSurfaceFormStart}--%>", BuildSurfaceModalStart(surface, false)); codeFront = codeFront.Replace("<%--{ModalSurfaceFormEnd}--%>", BuildSurfaceModalEnd(surface)); codeFront = codeFront.Replace("<%--{ModalSurfaceViewStart}--%>", BuildSurfaceModalStart(surface, true)); codeFront = codeFront.Replace("<%--{ModalSurfaceViewEnd}--%>", BuildSurfaceModalEnd(surface)); codeFront_form = codeFront_form.Replace("<%--{ModalSurfaceFormStart}--%>", BuildSurfaceModalStart(surface, false)); codeFront_form = codeFront_form.Replace("<%--{ModalSurfaceFormEnd}--%>", BuildSurfaceModalEnd(surface)); codeFront_view = codeFront_view.Replace("<%--{ModalSurfaceViewStart}--%>", BuildSurfaceModalStart(surface, true)); codeFront_view = codeFront_view.Replace("<%--{ModalSurfaceViewEnd}--%>", BuildSurfaceModalEnd(surface)); //CVH 2017-02-17 Build Bulk Update modal codeFront = codeFront.Replace("<%--{BulkUpdateFields}--%>", gridOptions.allowBulkUpdate ? BuildSurfaceBulkUpdateModal(surface) : ""); codeFront_grid = codeFront_grid.Replace("<%--{BulkUpdateFields}--%>", gridOptions.allowBulkUpdate ? BuildSurfaceBulkUpdateModal(surface) : ""); codeFront_form = codeFront_form.Replace("<%--{BulkUpdateFields}--%>", gridOptions.allowBulkUpdate ? BuildSurfaceBulkUpdateModal(surface) : ""); codeFront_view = codeFront_view.Replace("<%--{BulkUpdateFields}--%>", gridOptions.allowBulkUpdate ? BuildSurfaceBulkUpdateModal(surface) : ""); //build edit field //codeFront = codeFront.Replace("<%--{SurfaceEditField}--%>", BuildSurfaceForm(surface, true)); //set userControls //codeFront = codeFront.Replace("<%--{Attachments}--%>", GetUserControl(surface, "Attachments")); //codeFront = codeFront.Replace("<%--{Notes}--%>", GetUserControl(surface, "Notes")); codeFront = codeFront.Replace("<%--{Mediswitch}--%>", GetUserControl(surface, "Mediswitch")); codeFront_view = codeFront_view.Replace("<%--{Mediswitch}--%>", GetUserControl(surface, "Mediswitch")); codeFront_form = codeFront_form.Replace("<%--{Mediswitch}--%>", GetUserControl(surface, "Mediswitch")); //Create Child Surface apps //codeFront = codeFront.Replace("<%--{SurfaceChildAppsPlaceholder}--%>", BuildChildSurfaceApps(surface)); //set placeholder codeFront = codeFront.Replace("<%--{SurfaceNamePlaceholder}--%>", surface.name); codeFront_grid = codeFront_grid.Replace("<%--{SurfaceNamePlaceholder}--%>", surface.name); codeFront_form = codeFront_form.Replace("<%--{SurfaceNamePlaceholder}--%>", surface.name); codeFront_view = codeFront_view.Replace("<%--{SurfaceNamePlaceholder}--%>", surface.name); if (uniqueValidationRequired) { codeFront = codeFront.Replace("ValidationGroup=\"surface\"", "ValidationGroup=\"" + surface.name + "\""); codeFront_form = codeFront_form.Replace("ValidationGroup=\"surface\"", "ValidationGroup=\"" + surface.name + "\""); codeFront_view = codeFront_view.Replace("ValidationGroup=\"surface\"", "ValidationGroup=\"" + surface.name + "\""); } //save to new location result = utils.ConvertStringtoHTMLFile(codeFront, HttpContext.Current.Server.MapPath(destinationPath + surface.name + ".ascx")); result = utils.ConvertStringtoHTMLFile(codeFront_grid, HttpContext.Current.Server.MapPath(destinationPath + surface.name + "_grid.ascx")); result = utils.ConvertStringtoHTMLFile(codeFront_form, HttpContext.Current.Server.MapPath(destinationPath + surface.name + "_form.ascx")); result = utils.ConvertStringtoHTMLFile(codeFront_view, HttpContext.Current.Server.MapPath(destinationPath + surface.name + "_view.ascx")); //create query table List paramList = new List(); oDynamicParam param1 = new oDynamicParam(); param1.paramDisplayName = "SurfaceID"; param1.paramObject = surface.recId; paramList.Add(param1); oDynamicParam param2 = new oDynamicParam(); param2.paramDisplayName = "UserLink"; param2.paramObject = 0; paramList.Add(param2); oDynamicParam param3 = new oDynamicParam(); param3.paramDisplayName = "UserId"; param3.paramObject = 216; paramList.Add(param3); paramLists = string.Join(",", paramList); xData.ExecuteProc("sp_CreateSurfaceQueryTable", paramList); } catch (Exception ex) { exception.HandleException("handler:", MethodBase.GetCurrentMethod().Name + " " + destinationPath + " " + surface?.name + " params " + paramLists + " template:" + sourceTemplateControl, ex, HttpContext.Current.Session["user"]); } return result; } private static string GetUserControl(oSurface surface, string controlModuleName, string controlPath = "", string controlID = "", bool isView = false, string surfaceFieldName = "", string fieldGroupName = "") { string result = String.Empty; controlID += surfaceFieldName; if (isView) controlID += "View"; try { foreach (oSurfaceField field in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceField), "surfaceId,isActive", surface.recId + ",1")) { pNums.FieldType typ = (pNums.FieldType)Enum.ToObject(typeof(pNums.FieldType), field.surfaceFieldTypeId); switch (typ) { case pNums.FieldType.Attachment: if (controlModuleName == "Attachments") result = ""; break; //case pNums.FieldType.Note: // if (controlModuleName == "Notes") // result = ""; // if (controlModuleName == "Attachments") // result = ""; // break; case pNums.FieldType.Mediswitch: if (controlModuleName == "Mediswitch") result = "<%@ Register Src=\"~/controls/module/mediswitchMSV.ascx\" TagPrefix=\"uc1\" TagName=\"mediswitchMSV\" %>"; result += ""; break; case pNums.FieldType.Control: if (controlModuleName == "Surface Notes" && fieldGroupName != "") { result = "<%@ Register Src=\"~/controls/" + controlPath + "\" TagPrefix=\"uc1\" TagName=\"" + controlID + "\" %>"; result += ""; } else if (controlModuleName != "Attachments" && controlModuleName != "Mediswitch") { result = String.Empty; if (controlModuleName == "Surface Drawing") { if (HttpContext.Current.Session["osetup"] != null) { oSetup _setup = (oSetup)HttpContext.Current.Session["osetup"]; if (_setup.code == "SHOU-1") { result = "<%@ Register Src=\"~/controls/module/imageMap.ascx\" TagPrefix=\"uc1\" TagName=\"imageMap" + controlID + "\" %>"; result += ""; } } } result += "<%@ Register Src=\"~/controls/" + controlPath + "\" TagPrefix=\"uc1\" TagName=\"" + controlID + "\" %>"; result += ""; } break; default: break; } } } catch (Exception ex) { exception.HandleException("handler:", MethodBase.GetCurrentMethod().Name, ex, HttpContext.Current.Session["user"]); } return result; } private static string SurfaceGridColumnFilter(oSurface _surface, bool iconsAsText) { string result = String.Empty; StringBuilder filterBuilder = new StringBuilder(); try { int visibleActionId = 0; foreach (oSurfaceAction act in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceAction), "actionType,action", pNums.ActionType.ToggleView.GetHashCode() + ",Visible")) { visibleActionId = act.recId; } //get all surface filter fields ArrayList fields = xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceField), "surfaceId,isFilter", _surface.recId + ",1", "sequence"); foreach (oSurfaceField field in fields) { if (filterBuilder.ToString() == String.Empty) filterBuilder.AppendLine("
"); string filterName = "colFilter_" + field.surfaceFieldName; string display = field.surfaceFieldDisplay; if (field.controlText != String.Empty) display = field.controlText; string toggleView = ""; if (field.actionType == pNums.ActionType.ToggleView.GetHashCode() && field.action == visibleActionId) { //determine if the source field is also a filter field, if so, set toggle field to visible false foreach (oSurfaceField toggleField in fields) { if (toggleField.recId == field.actionSource) { toggleView = " style='display:none' "; break; } } } filterBuilder.AppendLine("
"); filterBuilder.AppendLine("
"); filterBuilder.AppendLine("
"); filterBuilder.AppendLine(""); filterBuilder.AppendLine("
"); filterBuilder.AppendLine("
"); filterBuilder.AppendLine("
"); filterBuilder.AppendLine(""); filterBuilder.AppendLine(""); filterBuilder.AppendLine("
"); filterBuilder.AppendLine("
"); filterBuilder.AppendLine("
"); filterBuilder.AppendLine("
"); } if (filterBuilder.ToString() != String.Empty) { filterBuilder.AppendLine("
"); filterBuilder.AppendLine("
"); filterBuilder.AppendLine("
"); filterBuilder.AppendLine(" "); filterBuilder.AppendLine("
"); filterBuilder.AppendLine("
"); filterBuilder.AppendLine("
"); //CVH 2017-10-10 Build text filter buttons if surface setup to use text instead of icons if (iconsAsText) { filterBuilder.AppendLine(" "); filterBuilder.AppendLine(" "); filterBuilder.AppendLine(" "); filterBuilder.AppendLine(" "); filterBuilder.AppendLine(" "); filterBuilder.AppendLine(" "); } else { filterBuilder.AppendLine(" "); filterBuilder.AppendLine(" "); filterBuilder.AppendLine(" "); filterBuilder.AppendLine(" "); filterBuilder.AppendLine(" "); filterBuilder.AppendLine(" "); } filterBuilder.AppendLine("
"); filterBuilder.AppendLine("
"); filterBuilder.AppendLine("
"); filterBuilder.AppendLine("
"); filterBuilder.AppendLine("
"); filterBuilder.AppendLine("
"); filterBuilder.AppendLine("
"); filterBuilder.AppendLine("
"); } result = filterBuilder.ToString(); } catch (Exception ex) { exception.HandleException("handler:", MethodBase.GetCurrentMethod().Name, ex, HttpContext.Current.Session["user"]); } return result; } /// /// build Grid based on Grid Settings /// /// /// private static string BuildSurfaceGrid(oSurface _surface, bool ischild, bool isView, string validationGroup = "", string fieldName = "", int parentSurfaceId = 0, bool isComparable = false, int length = 0) { string result = String.Empty; StringBuilder gridBuilder = new StringBuilder(); bool useTabs = false; string viewIcon = "glyphicon-eye-open"; string editIcon = "edit"; string prefix = "g"; try { ArrayList list = xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceGridOptions), "surfaceId", _surface.recId.ToString()); oSurfaceGridOptions gridOptions = new oSurfaceGridOptions(); if (list != null && list.Count > 0) gridOptions = (oSurfaceGridOptions)list[0]; useTabs = gridOptions.isTabbed; switch (gridOptions.viewIcon) { case "eye": viewIcon = "glyphicon-eye-open"; break; case "user": viewIcon = "glyphicon-user"; break; default: viewIcon = "glyphicon-eye-open"; break; } editIcon = gridOptions.editIcon != string.Empty ? gridOptions.editIcon : "edit"; if (ischild) { if (isView) { gridBuilder.AppendLine(""); gridBuilder.AppendLine(""); } else { gridBuilder.AppendLine(""); gridBuilder.AppendLine(""); } if (gridOptions.allowAdd && !isView) { gridBuilder.AppendLine("
"); if (gridOptions.allowImport) { gridBuilder.AppendLine("
"); gridBuilder.AppendLine("
"); gridBuilder.AppendLine(""); gridBuilder.AppendLine(""); gridBuilder.AppendLine(""); gridBuilder.AppendLine(""); gridBuilder.AppendLine(""); gridBuilder.AppendLine(""); gridBuilder.AppendLine("
"); gridBuilder.AppendLine("
"); } else { gridBuilder.AppendLine("
"); } if (isComparable) { gridBuilder.AppendLine(""); } gridBuilder.AppendLine(""); gridBuilder.AppendLine("
"); gridBuilder.AppendLine("
"); if (!gridOptions.allowImport) { gridBuilder.AppendLine("

"); gridBuilder.AppendLine("
"); } } else { //CVH 2017-05-28 Blank row when no Add button, otherwise label behind table gridBuilder.AppendLine("

"); gridBuilder.AppendLine("
"); } } //CVH 2017-02-14 Subtabs. Only get tabs where parentId is 0. When building grid tabs, only building it for primary tab, not subtab ArrayList fieldTabs = xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceField), "surfaceId,isActive,parentId,surfaceFieldTypeId", _surface.recId + ",1,0," + pNums.FieldType.Tab.GetHashCode(), "sequence"); if (fieldTabs.Count > 1 && useTabs)//make tabs { gridBuilder.AppendLine("
"); //nav tabs gridBuilder.AppendLine("
    "); int navCounter = 0; foreach (oSurfaceField navTab in fieldTabs) { string navTabDisplay = navTab.controlText != "" ? navTab.controlText : navTab.surfaceFieldDisplay; navCounter++; //CVH 2017-06-26 Enable secruity access on grid tabs if (navCounter == 1) //gridBuilder.AppendLine("
  • " + navTabDisplay + "
  • "); gridBuilder.AppendLine("
  • " + navTabDisplay + "
  • "); else //gridBuilder.AppendLine("
  • " + navTabDisplay + "
  • "); gridBuilder.AppendLine("
  • " + navTabDisplay + "
  • "); } gridBuilder.AppendLine("
"); //tab panes gridBuilder.AppendLine("
"); int tabCounter = 0; //build tab panels foreach (oSurfaceField tabPanel in fieldTabs) { tabCounter++; if (tabCounter == 1) gridBuilder.AppendLine("
"); else gridBuilder.AppendLine("
"); gridBuilder.AppendLine("
"); gridBuilder.AppendLine("

"); //now build repeater //********* gridBuilder.AppendLine(BuildRepeater(_surface, tabPanel.recId, viewIcon, ischild, isView, fieldName, editIcon)); //****** gridBuilder.AppendLine("
"); gridBuilder.AppendLine("
"); gridBuilder.AppendLine("
"); //end of tab panel } gridBuilder.AppendLine("
"); //end of tab panes gridBuilder.AppendLine("
"); //end of tab panel } else//combined Grid { gridBuilder.AppendLine(BuildRepeater(_surface, 0, viewIcon, ischild, isView, fieldName, editIcon)); } if (ischild) { gridBuilder.AppendLine(""); gridBuilder.AppendLine(""); } result = gridBuilder.ToString(); if (ischild)//setup options for child grid result = SetButtonVisibility(result, _surface, true, isView, length); } catch (Exception ex) { exception.HandleException("handler:", MethodBase.GetCurrentMethod().Name, ex, HttpContext.Current.Session["user"]); } return result; } /// /// build surface compare view /// /// /// private static string BuildSurfaceCompare(oSurface _surface, bool isChild = false, string parentFieldName = "", int parentSurfaceId = 0) { string result = string.Empty; StringBuilder compareBuilder = new StringBuilder(); bool useTabs = false; try { ArrayList list = xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceGridOptions), "surfaceId", _surface.recId.ToString()); oSurfaceGridOptions gridOptions = new oSurfaceGridOptions(); if (list != null && list.Count > 0) gridOptions = (oSurfaceGridOptions)list[0]; useTabs = gridOptions.isTabbed; if (isChild) { //if (isView) // gridBuilder.AppendLine(""); //else compareBuilder.AppendLine(""); if (gridOptions.allowAdd && isChild) { compareBuilder.AppendLine("
"); compareBuilder.AppendLine("
"); compareBuilder.AppendLine(""); compareBuilder.AppendLine(""); compareBuilder.AppendLine("
"); compareBuilder.AppendLine("
"); compareBuilder.AppendLine("

"); compareBuilder.AppendLine("
"); } } ArrayList fields = new ArrayList(); oSurfaceField filterField = new oSurfaceField(); foreach (oSurfaceField filterFields in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceField), "surfaceId,isActive,isComparable,isFilter", _surface.recId + ",1,1,1")) { filterField = filterFields; break; } fields = xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceField), "surfaceId,isActive,isComparable,isFilter", _surface.recId + ",1,1,0", "sequence"); compareBuilder.AppendLine("
"); compareBuilder.AppendLine("
"); int size = 12 / _surface.columnCount; compareBuilder.AppendLine("
"); for (int i = 1; i <= _surface.columnCount; i++) { if (i == _surface.columnCount) compareBuilder.AppendLine("
"); else compareBuilder.AppendLine("
"); compareBuilder.AppendLine("
"); if (gridOptions.allowEdit) { if (parentFieldName != "") compareBuilder.AppendLine(""); else compareBuilder.AppendLine(""); } if (gridOptions.allowClone) { if (parentFieldName != "") compareBuilder.AppendLine(""); else compareBuilder.AppendLine(""); } compareBuilder.AppendLine("
"); compareBuilder.AppendLine("
"); compareBuilder.AppendLine("
"); compareBuilder.AppendLine("
"); compareBuilder.AppendLine("
"); compareBuilder.AppendLine("" : filterField.surfaceFieldDisplay + ""); compareBuilder.AppendLine("
"); compareBuilder.AppendLine("
"); if (parentFieldName != "") compareBuilder.AppendLine(""); else compareBuilder.AppendLine(""); compareBuilder.AppendLine("
"); compareBuilder.AppendLine("
"); compareBuilder.AppendLine("
"); compareBuilder.AppendLine("
"); //compareBuilder.AppendLine("
"); compareBuilder.AppendLine(BuildSurfaceCompareView(_surface, fields, i, parentFieldName)); //compareBuilder.AppendLine("
"); compareBuilder.AppendLine("
"); } compareBuilder.AppendLine("
"); compareBuilder.AppendLine("
"); compareBuilder.AppendLine("
"); if (isChild) compareBuilder.AppendLine(""); result = compareBuilder.ToString(); } catch (Exception ex) { exception.HandleException("handler:", MethodBase.GetCurrentMethod().Name, ex, HttpContext.Current.Session["user"]); } return result; } private static string BuildSurfaceCompareView(oSurface _surface, ArrayList fields, int colNum, string parentFieldName = "") { string result = String.Empty; StringBuilder formBuilder = new StringBuilder(); try { bool alt = true; foreach (oSurfaceField ctrl in fields) { alt = !alt; if (ctrl.surfaceFieldTypeId != pNums.FieldType.Tab.GetHashCode() && ctrl.surfaceFieldTypeId != pNums.FieldType.Group.GetHashCode()) { //build control based on type pNums.FieldType typ = (pNums.FieldType)Enum.ToObject(typeof(pNums.FieldType), ctrl.surfaceFieldTypeId); string displayClass = ctrl.isHidden ? "noShow" : "padding8"; if (alt) displayClass = displayClass + " faded"; //formBuilder.AppendLine("
"); string displayString = ctrl.controlText != "" ? ctrl.controlText : ctrl.surfaceFieldDisplay; switch (typ) { #region Text case pNums.FieldType.Text: //12 col div formBuilder.AppendLine("
"); //form group formBuilder.AppendLine("
"); //label formBuilder.AppendLine("
"); formBuilder.AppendLine(""); formBuilder.AppendLine("
"); formBuilder.AppendLine("
"); if (parentFieldName != "") formBuilder.AppendLine(""); else formBuilder.AppendLine(""); formBuilder.AppendLine("
"); ////end of control //formBuilder.AppendLine("
"); //end form group formBuilder.AppendLine("
"); //end of 12 col div formBuilder.AppendLine("
"); break; #endregion #region Number case pNums.FieldType.Number: //5 col div formBuilder.AppendLine("
"); //form group formBuilder.AppendLine("
"); //label formBuilder.AppendLine("
"); formBuilder.AppendLine(""); formBuilder.AppendLine("
"); formBuilder.AppendLine("
"); if (parentFieldName != "") formBuilder.AppendLine(""); else formBuilder.AppendLine(""); formBuilder.AppendLine("
"); //end of control formBuilder.AppendLine("
"); //end form group formBuilder.AppendLine("
"); //end of 5 col div break; #endregion #region Decimal case pNums.FieldType.Decimal: //5 col div formBuilder.AppendLine("
"); //form group formBuilder.AppendLine("
"); //label formBuilder.AppendLine("
"); formBuilder.AppendLine(""); formBuilder.AppendLine("
"); formBuilder.AppendLine("
"); if (parentFieldName != "") formBuilder.AppendLine(""); else formBuilder.AppendLine(""); formBuilder.AppendLine("
"); //end of control formBuilder.AppendLine("
"); //end form group formBuilder.AppendLine("
"); //end of 5 col div break; #endregion #region Picklist case pNums.FieldType.Picklist: //5 col div formBuilder.AppendLine("
"); //form group formBuilder.AppendLine("
"); //label formBuilder.AppendLine("
"); formBuilder.AppendLine(""); formBuilder.AppendLine("
"); formBuilder.AppendLine("
"); if (parentFieldName != "") formBuilder.AppendLine(""); else formBuilder.AppendLine(""); formBuilder.AppendLine("
"); //end of control formBuilder.AppendLine("
"); //end form group formBuilder.AppendLine("
"); //end of 5 col div break; #endregion #region Date case pNums.FieldType.Date: //5 col div formBuilder.AppendLine("
"); //form group formBuilder.AppendLine("
"); //label formBuilder.AppendLine("
"); formBuilder.AppendLine(""); formBuilder.AppendLine("
"); formBuilder.AppendLine("
"); if (parentFieldName != "") formBuilder.AppendLine(""); else formBuilder.AppendLine(""); formBuilder.AppendLine("
"); //end of control formBuilder.AppendLine("
"); //end form group formBuilder.AppendLine("
"); //end of 5 col div break; #endregion #region Time case pNums.FieldType.Time: //5 col div formBuilder.AppendLine("
"); //form group formBuilder.AppendLine("
"); //label formBuilder.AppendLine("
"); formBuilder.AppendLine(""); formBuilder.AppendLine("
"); formBuilder.AppendLine("
"); if (parentFieldName != "") formBuilder.AppendLine(""); else formBuilder.AppendLine(""); formBuilder.AppendLine("
"); //end of control formBuilder.AppendLine("
"); //end form group formBuilder.AppendLine("
"); //end of 5 col div break; #endregion #region Checkbox case pNums.FieldType.Checkbox: //5 col div formBuilder.AppendLine("
"); //form group formBuilder.AppendLine("
"); //label formBuilder.AppendLine("
"); formBuilder.AppendLine(""); formBuilder.AppendLine("
"); formBuilder.AppendLine("
"); if (parentFieldName != "") formBuilder.AppendLine(""); else formBuilder.AppendLine(""); formBuilder.AppendLine("
"); //end of control formBuilder.AppendLine("
"); //end form group formBuilder.AppendLine("
"); //end of 5 col div break; #endregion #region RadioButtonList case pNums.FieldType.RadioButtonList: //5 col div formBuilder.AppendLine("
"); //form group formBuilder.AppendLine("
"); //label formBuilder.AppendLine("
"); formBuilder.AppendLine(""); formBuilder.AppendLine("
"); formBuilder.AppendLine("
"); if (parentFieldName != "") formBuilder.AppendLine(""); else formBuilder.AppendLine(""); formBuilder.AppendLine("
"); //end of control formBuilder.AppendLine("
"); //end form group formBuilder.AppendLine("
"); //end of 5 col div break; #endregion #region RelationalField case pNums.FieldType.RelationalField: //5 col div formBuilder.AppendLine("
"); //form group formBuilder.AppendLine("
"); //label formBuilder.AppendLine("
"); formBuilder.AppendLine(""); formBuilder.AppendLine("
"); formBuilder.AppendLine("
"); if (parentFieldName != "") formBuilder.AppendLine(""); else formBuilder.AppendLine(""); formBuilder.AppendLine("
"); //end of control formBuilder.AppendLine("
"); //end form group formBuilder.AppendLine("
"); //end of 5 col div break; #endregion #region Caption case pNums.FieldType.Caption: //5 col div formBuilder.AppendLine("
"); //form group formBuilder.AppendLine("
"); //label formBuilder.AppendLine("
"); formBuilder.AppendLine(""); formBuilder.AppendLine("
"); formBuilder.AppendLine("
"); if (parentFieldName != "") formBuilder.AppendLine(""); else formBuilder.AppendLine(""); formBuilder.AppendLine("
"); //end of control formBuilder.AppendLine("
"); //end form group formBuilder.AppendLine("
"); //end of 5 col div break; #endregion #region Content case pNums.FieldType.Content: //5 col div formBuilder.AppendLine("
"); //form group formBuilder.AppendLine("
"); formBuilder.AppendLine("
"); if (parentFieldName != "") formBuilder.AppendLine(""); else formBuilder.AppendLine(""); formBuilder.AppendLine("
"); //end of control formBuilder.AppendLine("
"); //end form group formBuilder.AppendLine("
"); //end of 5 col div break; #endregion #region CheckboxList //formBuilder.AppendLine(""); case pNums.FieldType.CheckboxList: //5 col div formBuilder.AppendLine("
"); //form group formBuilder.AppendLine("
"); //label formBuilder.AppendLine("
"); formBuilder.AppendLine(""); formBuilder.AppendLine("
"); formBuilder.AppendLine("
"); if (parentFieldName != "") formBuilder.AppendLine(""); else formBuilder.AppendLine(""); formBuilder.AppendLine("
"); //end of control formBuilder.AppendLine("
"); //end form group formBuilder.AppendLine("
"); //end of 5 col div break; #endregion #region MultiPicklist //formBuilder.AppendLine(""); case pNums.FieldType.MultiPicklist: //5 col div formBuilder.AppendLine("
"); //form group formBuilder.AppendLine("
"); //label formBuilder.AppendLine("
"); formBuilder.AppendLine(""); formBuilder.AppendLine("
"); formBuilder.AppendLine("
"); if (parentFieldName != "") formBuilder.AppendLine(""); else formBuilder.AppendLine(""); formBuilder.AppendLine("
"); //end of control formBuilder.AppendLine("
"); //end form group formBuilder.AppendLine("
"); //end of 5 col div break; #endregion #region Image case pNums.FieldType.Image: //5 col div formBuilder.AppendLine("
"); //form group formBuilder.AppendLine("
"); //label formBuilder.AppendLine(""); formBuilder.AppendLine("
"); if (parentFieldName != "") formBuilder.AppendLine(""); else formBuilder.AppendLine(""); formBuilder.AppendLine("
"); //end of control formBuilder.AppendLine("
"); //end form group formBuilder.AppendLine("
"); //end of 5 col div break; #endregion #region Control case pNums.FieldType.Control: //12 col div formBuilder.AppendLine("
"); //form group formBuilder.AppendLine("
"); //label formBuilder.AppendLine("
"); formBuilder.AppendLine(""); formBuilder.AppendLine("
"); formBuilder.AppendLine("
"); if (parentFieldName != "") formBuilder.AppendLine(""); else formBuilder.AppendLine(""); formBuilder.AppendLine("
"); //end of control formBuilder.AppendLine("
"); //end form group formBuilder.AppendLine("
"); //end of 12 col div break; #endregion } //formBuilder.AppendLine("
"); } } result = formBuilder.ToString(); } catch (Exception ex) { exception.HandleException("handler:", MethodBase.GetCurrentMethod().Name, ex, HttpContext.Current.Session["user"]); } return result; } /// /// Build the repeater for the relevant tab /// /// /// /// private static string BuildRepeater(oSurface _surface, int tabId, string viewIcon, bool isChild, bool isView, string fieldName, string editIcon) { oSurfaceGridOptions gridOptions = null; foreach (oSurfaceGridOptions options in xData.GetTypedByCriteriaSpecific("redId", typeof(oSurfaceGridOptions), "surfaceId", _surface.recId.ToString())) { gridOptions = options; } //oSurfaceGridOptions gridOptions = (oSurfaceGridOptions)xData.GetTypedByCriteriaSpecific("redId", typeof(oSurfaceGridOptions), "surfaceId", _surface.recId.ToString())[0]; if (gridOptions == null) return ""; string result = String.Empty; string childPrefix = String.Empty; string viewPrefix = String.Empty; if (isChild) childPrefix = "Child"; if (isView) viewPrefix = "v"; StringBuilder rptBuilder = new StringBuilder(); try { ArrayList fields = new ArrayList(); ArrayList groupedFields = xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceField), "surfaceId,isActive,isGrouped", _surface.recId.ToString() + ",1,1", "gridSequence"); if (tabId > 0) { List groupIds = new List(); //fetch group ids for this tab ArrayList groups = xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceField), "surfaceId,isActive,parentId,surfaceFieldTypeId", _surface.recId + ",1," + tabId + "," + pNums.FieldType.Group.GetHashCode(), "sequence"); foreach (oSurfaceField group in groups) { groupIds.Add(group.recId.ToString()); } //fetch fields for these groups only fields = xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceField), "parentId", String.Join(",", groupIds.ToArray()), "gridSequence,Sequence"); //Get Constant fields //TO DO } else // one repeater { fields = xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceField), "surfaceId,isActive,isGrid", _surface.recId + ",1,1", "gridSequence,Sequence"); } string tableborder = " table-bordered"; string tableResponsive = "table-responsive"; if (gridOptions.noBorders) tableborder = String.Empty; if (gridOptions.freezeHeader && !isChild) { tableborder += " palette-freeze-header"; tableResponsive = "palette-table-fixed"; } rptBuilder.AppendLine("
\">"); if (isChild) rptBuilder.AppendLine(""); else rptBuilder.AppendLine(""); rptBuilder.AppendLine(""); if (isChild) { rptBuilder.AppendLine(""); rptBuilder.AppendLine($" table" + tableborder + " table-striped table-hover\" data-fixed-cols=\"<%--{dtFixedColumns}--%>\" data-page-length=\"<%--{dtPageLength}--%>\" data-grid-height=\"<%--{dtGridHeight}--%>\">"); } else rptBuilder.AppendLine("
table" + tableborder + " table-striped table-hover\" data-fixed-cols=\"<%--{dtFixedColumns}--%>\" data-page-length=\"<%--{dtPageLength}--%>\" data-grid-height=\"<%--{dtGridHeight}--%>\">"); rptBuilder.AppendLine(""); rptBuilder.AppendLine(""); rptBuilder.AppendLine("<%--{GroupedHeader}--%>"); rptBuilder.AppendLine("<%--{BulkUpdateCheckboxHdr}--%>"); rptBuilder.AppendLine(""); rptBuilder.AppendLine(""); rptBuilder.AppendLine("<%--{GridHeader}--%>"); /* CVH 2016-01-30 Add ID and runat tags to be able to change heading text when switching to Edit mode */ rptBuilder.AppendLine(""); if (editIcon == "profile") rptBuilder.AppendLine(""); else if (editIcon == "results") rptBuilder.AppendLine(""); else rptBuilder.AppendLine(""); rptBuilder.AppendLine(""); rptBuilder.AppendLine(""); rptBuilder.AppendLine(""); rptBuilder.AppendLine(""); rptBuilder.AppendLine(""); rptBuilder.AppendLine(""); rptBuilder.AppendLine(""); rptBuilder.AppendLine($", this)\" id=\"<%#DataBinder.Eval(Container, \"DataItem.itemID\")%>\">"); rptBuilder.AppendLine("<%--{GroupedItems}--%>"); rptBuilder.AppendLine("<%--{BulkUpdateCheckbox}--%>"); rptBuilder.AppendLine(""); rptBuilder.AppendLine(""); rptBuilder.AppendLine("<%--{GridItem}--%>"); if (gridOptions.iconsAsText)//make icons text { rptBuilder.AppendLine(""); rptBuilder.AppendLine(""); rptBuilder.AppendLine(""); rptBuilder.AppendLine(""); } else // use icons { rptBuilder.AppendLine(""); rptBuilder.AppendLine(""); rptBuilder.AppendLine(""); rptBuilder.AppendLine(""); } rptBuilder.AppendLine(""); rptBuilder.AppendLine(""); rptBuilder.AppendLine(""); rptBuilder.AppendLine("<%--{Footer}--%>"); rptBuilder.AppendLine(""); rptBuilder.AppendLine("
\" visible='<%--{StatusVisible}--%>'>Status\" visible='<%--{UserLinkVisible}--%>'>Linked User\" visible='<%--{ViewVisible}--%>'>View\" visible='<%--{EditVisible}--%>'>Profile\" visible='<%--{EditVisible}--%>'>Results\" visible='<%--{EditVisible}--%>'>Edit\" visible='<%--{CloneVisible}--%>'>Clone\" visible='<%--{RemoveVisible}--%>'>Delete
\" runat=\"server\" id=\"tdStatus\" visible='<%# (bool)DataBinder.Eval(Container, \"DataItem.showWizardStatus\") %>'>"); rptBuilder.AppendLine(""); rptBuilder.AppendLine(""); rptBuilder.AppendLine("\" visible='<%#(bool)DataBinder.Eval(Container, \"DataItem.linkUser\") && User.userType == (int)framework_business.pNums.UserType.AdminUser%>'>"); rptBuilder.AppendLine(""); rptBuilder.AppendLine(""); rptBuilder.AppendLine("\" visible='<%#(bool)DataBinder.Eval(Container, \"DataItem.allowView\") && ((User.userType >= (int)DataBinder.Eval(Container, \"DataItem.viewAccessType\") && User.userType != 5) || (User.userType == 5 && User.mimicUserType >= (int)DataBinder.Eval(Container, \"DataItem.viewAccessType\"))) %>' >"); rptBuilder.AppendLine(" View\" OnClick =\"lnkView" + childPrefix + "_Click\">"); rptBuilder.AppendLine(""); rptBuilder.AppendLine("\" visible='<%#(bool)DataBinder.Eval(Container, \"DataItem.allowEdit\") && ((User.userType >= (int)DataBinder.Eval(Container, \"DataItem.editAccessType\") && User.userType != 5) || (User.userType == 5 && User.mimicUserType >= (int)DataBinder.Eval(Container, \"DataItem.editAccessType\")))%>'>"); rptBuilder.AppendLine(" Edit\" OnClick=\"lnkEdit" + childPrefix + "_Click\">"); rptBuilder.AppendLine(""); rptBuilder.AppendLine(" Save\" OnClick=\"lnkSaveRow" + childPrefix + "_Click\">"); rptBuilder.AppendLine(""); rptBuilder.AppendLine("\" visible='<%#(bool)DataBinder.Eval(Container, \"DataItem.allowClone\") && ((User.userType >= (int)DataBinder.Eval(Container, \"DataItem.cloneAccessType\") && User.userType != 5) || (User.userType == 5 && User.mimicUserType >= (int)DataBinder.Eval(Container, \"DataItem.cloneAccessType\")))%>'>"); rptBuilder.AppendLine(" Clone\" OnClick=\"lnkClone" + childPrefix + "_Click\">"); rptBuilder.AppendLine(""); rptBuilder.AppendLine("\" visible='<%#(bool)DataBinder.Eval(Container, \"DataItem.allowRemove\") && ((User.userType >= (int)DataBinder.Eval(Container, \"DataItem.removeAccessType\") && User.userType != 5) || (User.userType == 5 && User.mimicUserType >= (int)DataBinder.Eval(Container, \"DataItem.removeAccessType\")))%>'>"); rptBuilder.AppendLine(" Delete\" OnClick=\"lnkRemove" + childPrefix + "_Click\""); rptBuilder.AppendLine(" OnClientClick=\"return window.confirm('Are you sure wish to delete this item?');\">"); rptBuilder.AppendLine(""); rptBuilder.AppendLine(" Cancel\" OnClick=\"lnkCancel" + childPrefix + "_Click\">"); rptBuilder.AppendLine(""); rptBuilder.AppendLine("\" visible='<%#(bool)DataBinder.Eval(Container, \"DataItem.allowView\") && ((User.userType >= (int)DataBinder.Eval(Container, \"DataItem.viewAccessType\") && User.userType != 5) || (User.userType == 5 && User.mimicUserType >= (int)DataBinder.Eval(Container, \"DataItem.viewAccessType\"))) %>' >"); rptBuilder.AppendLine(""); rptBuilder.AppendLine(""); rptBuilder.AppendLine("\" visible='<%#(bool)DataBinder.Eval(Container, \"DataItem.allowEdit\") && ((User.userType >= (int)DataBinder.Eval(Container, \"DataItem.editAccessType\") && User.userType != 5) || (User.userType == 5 && User.mimicUserType >= (int)DataBinder.Eval(Container, \"DataItem.editAccessType\")))%>'>"); rptBuilder.AppendLine(""); else if (editIcon == "results") rptBuilder.AppendLine(" CssClass=\"glyphicon glyphicon-list-alt palette-edit\" OnClick=\"lnkEdit" + childPrefix + "_Click\">"); else rptBuilder.AppendLine(" CssClass=\"glyphicon glyphicon-edit palette-edit\" OnClick=\"lnkEdit" + childPrefix + "_Click\">"); rptBuilder.AppendLine(""); rptBuilder.AppendLine(""); rptBuilder.AppendLine(""); rptBuilder.AppendLine("\" visible='<%#(bool)DataBinder.Eval(Container, \"DataItem.allowClone\") && ((User.userType >= (int)DataBinder.Eval(Container, \"DataItem.cloneAccessType\") && User.userType != 5) || (User.userType == 5 && User.mimicUserType >= (int)DataBinder.Eval(Container, \"DataItem.cloneAccessType\")))%>'>"); rptBuilder.AppendLine(""); rptBuilder.AppendLine(""); rptBuilder.AppendLine("\" visible='<%#(bool)DataBinder.Eval(Container, \"DataItem.allowRemove\") && ((User.userType >= (int)DataBinder.Eval(Container, \"DataItem.removeAccessType\") && User.userType != 5) || (User.userType == 5 && User.mimicUserType >= (int)DataBinder.Eval(Container, \"DataItem.removeAccessType\")))%>'>"); rptBuilder.AppendLine(""); rptBuilder.AppendLine(""); rptBuilder.AppendLine(""); rptBuilder.AppendLine(""); rptBuilder.AppendLine("
"); rptBuilder.AppendLine(""); rptBuilder.AppendLine("
"); rptBuilder.AppendLine("
"); result = rptBuilder.ToString(); //setup Grid Header Fields result = result.Replace("<%--{GridHeader}--%>", BuildSurfaceGridHeaderFields(fields)); result = result.Replace("<%--{GroupedHeader}--%>", BuildSurfaceGridGroupedHeader(groupedFields)); //setup Grid Data Fields result = result.Replace("<%--{GridItem}--%>", BuildSurfaceGridDataFields(fields, isChild, _surface.isCapitalizeInput)); result = result.Replace("<%--{GroupedItems}--%>", BuildSurfaceGridGroupedItems(groupedFields, isChild)); //setup Grid Footer result = result.Replace("<%--{Footer}--%>", BuildSurfaceGridFooter(_surface, fields)); } catch (Exception ex) { exception.HandleException("handler:", MethodBase.GetCurrentMethod().Name, ex, HttpContext.Current.Session["user"]); } return result; } private static string BuildSurfaceGridGroupedHeader(ArrayList groupedFields) { string result = String.Empty; if (groupedFields.Count > 0) { string displayText = ""; foreach (oSurfaceField field in groupedFields) { if (displayText != "") displayText += " "; displayText += field.controlText != "" ? field.controlText : field.surfaceFieldDisplay; } StringBuilder fieldBuilder = new StringBuilder(); fieldBuilder.AppendLine("" + displayText + ""); result = fieldBuilder.ToString(); } return result; } private static string BuildSurfaceGridGroupedItems(ArrayList groupedFields, bool isChild) { string result = String.Empty; StringBuilder fieldBuilder = new StringBuilder(); if (groupedFields.Count > 0) { fieldBuilder.AppendLine(""); string displayText = "", labelFormat = ""; int groupedDisplayCount = 1; foreach (oSurfaceField field in groupedFields) { if (displayText != "") displayText += " +\" \"+ "; displayText += "DataBinder.Eval(Container, \"DataItem." + field.surfaceFieldName + "\") "; groupedDisplayCount = field.groupedDisplayCount > 0 ? field.groupedDisplayCount : groupedDisplayCount; } labelFormat = ""; fieldBuilder.AppendLine(""); fieldBuilder.AppendLine("
"); switch (groupedDisplayCount) { case 1: fieldBuilder.AppendLine("" + labelFormat + ""); break; case 2: fieldBuilder.AppendLine("" + labelFormat + ""); fieldBuilder.AppendLine("" + labelFormat + ""); break; case 3: fieldBuilder.AppendLine("" + labelFormat + ""); fieldBuilder.AppendLine("" + labelFormat + ""); fieldBuilder.AppendLine("" + labelFormat + ""); break; default: break; } fieldBuilder.AppendLine("
"); fieldBuilder.AppendLine(""); } result = fieldBuilder.ToString(); return result; } private static string BuildSurfaceGridFooter(oSurface _surface, ArrayList _fields) { string result = string.Empty; try { StringBuilder footBuilder = new StringBuilder(); ArrayList gridOptions = xData.GetTypedByCriteriaSpecific("redId", typeof(oSurfaceGridOptions), "surfaceId", _surface.recId.ToString()); foreach (oSurfaceGridOptions gridOption in gridOptions) { if (gridOption.showAggregate) { footBuilder.AppendLine(""); footBuilder.AppendLine("\" visible='<%--{StatusVisible}--%>'>"); footBuilder.AppendLine("\" visible='<%--{UserLinkVisible}--%>'>"); footBuilder.AppendLine("" + gridOption.aggregateTitle + ""); footBuilder.AppendLine("<%--{FooterItem}--%>"); footBuilder.AppendLine("\" visible='<%--{ViewVisible}--%>'>"); footBuilder.AppendLine("\" visible='<%--{EditVisible}--%>'>"); footBuilder.AppendLine("\" visible='<%--{CloneVisible}--%>'>"); footBuilder.AppendLine("\" visible='<%--{RemoveVisible}--%>'>"); footBuilder.AppendLine(""); result = footBuilder.ToString(); result = result.Replace("<%--{FooterItem}--%>", BuildSurfaceGridFooterFields(_fields)); } } } catch (Exception ex) { exception.HandleException("handler:", MethodBase.GetCurrentMethod().Name, ex, HttpContext.Current.Session["user"]); } return result; } private static string BuildSurfaceGridFooterFields(ArrayList _fields) { string result = String.Empty; StringBuilder fieldBuilder = new StringBuilder(); try { int showCount = 0; foreach (oSurfaceField field in _fields) { if (field.surfaceFieldTypeId != pNums.FieldType.Tab.GetHashCode() && field.surfaceFieldTypeId != pNums.FieldType.Group.GetHashCode() && field.isGrid) { if (field.isHidden && !field.isGrid) { fieldBuilder.AppendLine(""); } else { string displayText = ""; foreach (oSurfaceGridAggregate sumFields in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceGridAggregate), "surfaceFieldId", field.recId.ToString())) { if (field.surfaceFieldTypeId != pNums.FieldType.Number.GetHashCode()) { if (sumFields.aggregateTypeId == pNums.AggregateType.sum.GetHashCode()) displayText = "<%# getTotalFor(\"" + field.surfaceFieldName + "\",\"N2\") %>"; else if (sumFields.aggregateTypeId == pNums.AggregateType.average.GetHashCode()) displayText = "<%# getAverageFor(\"" + field.surfaceFieldName + "\",\"N2\") %>"; if (field.isCurrency) { string currencySymbol = "R"; displayText = "
" + currencySymbol + "
"; } } else if (field.surfaceFieldTypeId != pNums.FieldType.Decimal.GetHashCode()) { //CVH 2017-03-01 Format Aggregate Type as currency where applicable if (sumFields.aggregateTypeId == pNums.AggregateType.sum.GetHashCode()) displayText = "<%# getTotalFor(\"" + field.surfaceFieldName + "\",\"N2\") %>"; else if (sumFields.aggregateTypeId == pNums.AggregateType.average.GetHashCode()) displayText = "<%# getAverageFor(\"" + field.surfaceFieldName + "\",\"N2\") %>"; if (field.isCurrency) { string currencySymbol = "R"; displayText = "
" + currencySymbol + "
"; } } } if (showCount > 0) fieldBuilder.AppendLine("" + displayText + ""); showCount++; } } } result = fieldBuilder.ToString(); } catch (Exception ex) { exception.HandleException("handler:", MethodBase.GetCurrentMethod().Name, ex, HttpContext.Current.Session["user"]); } return result; } /// /// Setup buttons on Repeater and Forms based on Grid Options /// /// /// /// private static string SetButtonVisibility(string codeFront, oSurface _surface, bool isChild, bool isView, int length = 0) { if (_surface.linkUser) { codeFront = codeFront.Replace("<%--{UserLinkButton}--%>", ""); codeFront = codeFront.Replace("<%--{UserLinkVisible}--%>", "true"); } else { codeFront = codeFront.Replace("<%--{UserLinkButton}--%>", "noShow"); codeFront = codeFront.Replace("<%--{UserLinkVisible}--%>", "false"); } if (length > 0) codeFront = codeFront.Replace("<%--{dtGridHeight}--%>", length.ToString()); ArrayList buttonFields = xData.GetTypedByCriteriaSpecific("redId", typeof(oSurfaceGridOptions), "surfaceId", _surface.recId.ToString()); if (buttonFields.Count == 0) { codeFront = codeFront.Replace("<%--{AddButton}--%>", "noShow"); codeFront = codeFront.Replace("<%--{BulkUpdateButton}--%>", "noShow"); codeFront = codeFront.Replace("<%--{EditButton}--%>", isView ? "noShow" : ""); codeFront = codeFront.Replace("<%--{CloneButton}--%>", "noShow"); codeFront = codeFront.Replace("<%--{RemoveButton}--%>", "noShow"); codeFront = codeFront.Replace("<%--{ViewButton}--%>", "noShow"); codeFront = codeFront.Replace("<%--{StatusButton}--%>", "noShow"); codeFront = codeFront.Replace("<%--{dtPageLength}--%>", "10"); codeFront = codeFront.Replace("<%--{dtFixedColumns}--%>", "2"); codeFront = codeFront.Replace("<%--{EditVisible}--%>", "true"); codeFront = codeFront.Replace("<%--{CloneVisible}--%>", "false"); codeFront = codeFront.Replace("<%--{RemoveVisible}--%>", "false"); codeFront = codeFront.Replace("<%--{ViewVisible}--%>", "false"); codeFront = codeFront.Replace("<%--{StatusVisible}--%>", "false"); codeFront = codeFront.Replace("<%--{BulkUpdateCheckboxHdr}--%>", ""); codeFront = codeFront.Replace("<%--{BulkUpdateCheckbox}--%>", ""); } else { foreach (oSurfaceGridOptions gridOption in buttonFields) { codeFront = codeFront.Replace("<%--{StatusButton}--%>", gridOption.showWizardStatus ? "" : "noShow"); codeFront = codeFront.Replace("<%--{dtPageLength}--%>", gridOption.pagingCount.ToString()); codeFront = codeFront.Replace("<%--{dtFixedColumns}--%>", gridOption.fixedColumns.ToString()); if (isChild && _surface.isLinkedSurface) { codeFront = codeFront.Replace("<%--{BulkUpdateButton}--%>", "noShow"); codeFront = codeFront.Replace("<%--{CloneButton}--%>", "noShow"); codeFront = codeFront.Replace("<%--{RemoveButton}--%>", "noShow"); codeFront = codeFront.Replace("<%--{ViewButton}--%>", "noShow"); //CVH 2017-01-12 If editing is allowed, but editIcon is set to none, don't show edit column codeFront = codeFront.Replace("<%--{EditButton}--%>", "noShow"); codeFront = codeFront.Replace("<%--{EditVisible}--%>", "false"); codeFront = codeFront.Replace("<%--{CloneVisible}--%>", "false"); codeFront = codeFront.Replace("<%--{RemoveVisible}--%>", "false"); codeFront = codeFront.Replace("<%--{ViewVisible}--%>", "false"); codeFront = codeFront.Replace("<%--{AddButton}--%>", "noShow"); } else { codeFront = codeFront.Replace("<%--{BulkUpdateButton}--%>", gridOption.allowBulkUpdate ? "" : "noShow"); codeFront = codeFront.Replace("<%--{CloneButton}--%>", gridOption.allowClone ? "" : "noShow"); codeFront = codeFront.Replace("<%--{RemoveButton}--%>", isView ? "noShow" : (gridOption.allowRemove ? "" : "noShow")); codeFront = codeFront.Replace("<%--{ViewButton}--%>", gridOption.allowView ? "" : "noShow"); //CVH 2017-01-12 If editing is allowed, but editIcon is set to none, don't show edit column codeFront = codeFront.Replace("<%--{EditButton}--%>", isView ? "noShow" : (gridOption.allowEdit && gridOption.editIcon != "none" ? "" : "noShow")); codeFront = codeFront.Replace("<%--{AddButton}--%>", gridOption.allowAdd ? "" : "noShow"); codeFront = codeFront.Replace("<%--{EditVisible}--%>", gridOption.allowEdit && gridOption.editIcon != "none" ? "true" : "false"); codeFront = codeFront.Replace("<%--{CloneVisible}--%>", gridOption.allowClone ? "true" : "false"); codeFront = codeFront.Replace("<%--{RemoveVisible}--%>", gridOption.allowRemove ? "true" : "false"); codeFront = codeFront.Replace("<%--{ViewVisible}--%>", gridOption.allowView ? "true" : "false"); } codeFront = codeFront.Replace("<%--{StatusVisible}--%>", gridOption.showWizardStatus ? "true" : "false"); //CVH 2016-10-04 Build table class based on grid options. Class list is used to determine filter, paging, export etc functions available on grid //CVH 2017-02-27 Build seperate class for child grid, only needs to be responsive string tblClass = ""; if (isChild) { if (gridOption.useFooTable) tblClass = "fooTableGridSurfaceChild"; else tblClass = "dataTableGridSurfaceChild"; if (gridOption.allowScroll) tblClass += " dataTableScrollChild"; //JR 2017-06-22 The grouping has weird behaviour, so just don't generate it when it's child grid //else if (xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceField), "surfaceId,isActive,isGrouped", _surface.recId.ToString() + ",1,1", "gridSequence").Count > 0) // tblClass += " dataTableScrollGroupChild"; } else { if (gridOption.useFooTable) tblClass = "fooTableGridSurface"; else tblClass = "dataTableGridSurface"; //GR 02-11-2016 commented out as we going to cater on custom control above grid //CVH 2017-02-10 Re-enabling sorting if (gridOption.allowSort) tblClass += " dataTableSort"; //CVH 2017-06-12 If default sorting has been applied to grid, disable jquery datatables initial sort on load if (gridOption.defaultSort != String.Empty) tblClass += " dataTableSortNoInit"; //if (gridOption.allowFilter) // tblClass += " dataTableSearch"; //if (gridOption.pagingCount > 0) // tblClass += " dataTablePage"; if (gridOption.allowExport) tblClass += " dataTableExport"; if (gridOption.allowColVis) tblClass += " dataTableColVis"; if (gridOption.allowScroll) tblClass += " dataTableScroll"; if (xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceField), "surfaceId,isActive,isGrouped", _surface.recId.ToString() + ",1,1", "gridSequence").Count > 0) tblClass += " dataTableScrollGroup"; } codeFront = codeFront.Replace("<%--{dtTableClasses}--%>", tblClass); codeFront = codeFront.Replace("<%--{RemoveWhiteSpace}--%>", (gridOption.allowFilter || gridOption.pagingCount > 0 ? "" : "noBreak")); if (gridOption.allowBulkUpdate && !isChild) { codeFront = codeFront.Replace("<%--{BulkUpdateCheckboxHdr}--%>", ""); codeFront = codeFront.Replace("<%--{BulkUpdateCheckbox}--%>", ""); } else { codeFront = codeFront.Replace("<%--{BulkUpdateCheckboxHdr}--%>", ""); codeFront = codeFront.Replace("<%--{BulkUpdateCheckbox}--%>", ""); } } } return codeFront; } /// /// Build Surface Grid Field Header /// /// /// /// REVISION 001: Add identifier to th tag, to enable setting of properties server side (e.g. visibility) /// AUTHOR: Charlene van Heerden /// DATE MODIFIED: 14 January 2016 /// private static string BuildSurfaceGridHeaderFields(ArrayList fields) { string result = String.Empty; StringBuilder fieldBuilder = new StringBuilder(); try { //CVH 2017-09-14 Default bootstrap font is Helvetica 14. Will use this to calculate height of vertical headers int maxFieldNameLength = 0; using (System.Drawing.Font stringFont = new System.Drawing.Font("Helvetica", 14)) { foreach (oSurfaceField field in fields) { if (field.isGrid && field.isVerticalHeader) { string displayText = field.controlText != "" ? field.controlText : field.surfaceFieldDisplay; using (System.Drawing.Graphics graphicsObj = (System.Drawing.Graphics.FromHwnd(IntPtr.Zero))) { System.Drawing.SizeF stringSize = graphicsObj.MeasureString(displayText, stringFont); int displayTextWidth = (int)Math.Ceiling(stringSize.Width); if (displayTextWidth > maxFieldNameLength) maxFieldNameLength = displayTextWidth; } } } //adjust height, but don't want negative number if (maxFieldNameLength > 0) maxFieldNameLength = (int)Math.Floor(maxFieldNameLength * 0.8); } int fieldCounter = 0; bool verticalExists = false; foreach (oSurfaceField field in fields) { /* CVH - 2016-01-20 */ if (field.surfaceFieldTypeId != pNums.FieldType.Tab.GetHashCode() && field.surfaceFieldTypeId != pNums.FieldType.Group.GetHashCode() && field.isGrid) { if (field.isVerticalHeader) verticalExists = true; /* CVH - 2016-02-29 - Need to set ID to FieldNAME not FieldDisplay, otherwise can get duplicate td's with same ID (utils.stripCharacters(field.surfaceFieldDisplay).Replace(" ", "")) */ //JasR 2016-01-27 - if something is hidden and on grid - then it shows on the gird string displayText = field.controlText != "" ? field.controlText : field.surfaceFieldDisplay; if (field.isHidden && !field.isGrid) { fieldBuilder.AppendLine("" + displayText + ""); } else { fieldCounter++; string dataPriority = field.surfaceFieldTypeId == pNums.FieldType.Sales.GetHashCode() || field.surfaceFieldTypeId == pNums.FieldType.Debtors.GetHashCode() ? "2" : fieldCounter.ToString(); string databreakpoint = ""; if (!field.isVerticalHeader && !verticalExists) { if (int.Parse(dataPriority) >= 3) databreakpoint = "xs"; if (int.Parse(dataPriority) > 4) databreakpoint = "xs sm"; if (int.Parse(dataPriority) > 5) databreakpoint = "xs sm md"; if (int.Parse(dataPriority) > 6) databreakpoint = "xs sm md lg"; } if (field.isVerticalHeader) { //CVH 2017-09-14 Make vertical header smaller //displayText = "
" + displayText + "
"; displayText = "
" + displayText + "
"; //fieldBuilder.AppendLine("" + displayText + ""); fieldBuilder.AppendLine("" + displayText + ""); } else { if (field.surfaceFieldTypeId == (int)pNums.FieldType.Text || field.surfaceFieldTypeId == (int)pNums.FieldType.Label) fieldBuilder.AppendLine("" + displayText + ""); else fieldBuilder.AppendLine("" + displayText + ""); } // fieldBuilder.AppendLine("" + field.surfaceFieldDisplay + ""); } } } result = fieldBuilder.ToString(); } catch (Exception ex) { exception.HandleException("handler:", MethodBase.GetCurrentMethod().Name, ex, HttpContext.Current.Session["user"]); } return result; } /// /// Build Surface Grid Field Data /// /// /// /// REVISION 001: Add identifier to td tag, to enable setting of properties server side (e.g. visibility) /// AUTHOR: Charlene van Heerden /// DATE MODIFIED: 14 January 2016 /// private static string BuildSurfaceGridDataFields(ArrayList fields, bool isChild = false, bool isCapitalize = false) { string result = string.Empty; StringBuilder fieldBuilder = new StringBuilder(); try { //CVH 2017-03-29 Get Styling Text Colour action oSurfaceAction stylingTextColourAction = new oSurfaceAction(); foreach (oSurfaceAction act in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceAction), "actionType", ((int)pNums.ActionType.Styling).ToString())) { if (act.action == "Text Colour") { stylingTextColourAction = act; break; } } //CVH 2017-09-12 Capitalize grid textboxes string capitalize = ""; if (isCapitalize) capitalize = " onchange=\"capitalize(this)\" "; /* CVH 2016-09-01 Add hidden field to first td indicating item isActive */ bool activeAdded = false; foreach (oSurfaceField field in fields) { if (field.surfaceFieldTypeId != pNums.FieldType.Tab.GetHashCode() && field.surfaceFieldTypeId != pNums.FieldType.Group.GetHashCode() && field.isGrid) { //CVH - 2016-11-09 - Centre align all cells //CVH - 2016-02-29 - Need to set ID to FieldNAME not FieldDisplay, otherwise can get duplicate td's with same ID (utils.stripCharacters(field.surfaceFieldDisplay).Replace(" ", "")) //JasR 2016-01-27 - if something is hidden and on grid - then it shows on the gird if (field.isHidden && !field.isGrid) fieldBuilder.AppendLine(""); else { if (field.surfaceFieldTypeId == (int)pNums.FieldType.Text || field.surfaceFieldTypeId == (int)pNums.FieldType.Label || field.surfaceFieldTypeId == (int)pNums.FieldType.Caption) fieldBuilder.AppendLine(""); else fieldBuilder.AppendLine(""); if (!activeAdded) { fieldBuilder.AppendLine(""); if (isChild) fieldBuilder.AppendLine(""); activeAdded = true; } } //CVH 2016-11-07 For field type label, allow wrapping of text if (field.surfaceFieldTypeId == pNums.FieldType.Label.GetHashCode()) { fieldBuilder.AppendLine(""); //if label is a time, need to format as time if (LabelSourceIsTime(field)) fieldBuilder.AppendLine(""); else fieldBuilder.AppendLine(""); } //CVH 2017-03-28 Build Decimal and Number labels in switch, depends on action. Also Date, depends on format else if (field.surfaceFieldTypeId != pNums.FieldType.Checkbox.GetHashCode() && field.surfaceFieldTypeId != pNums.FieldType.Decimal.GetHashCode() && field.surfaceFieldTypeId != pNums.FieldType.Number.GetHashCode() && field.surfaceFieldTypeId != pNums.FieldType.Date.GetHashCode() && field.surfaceFieldTypeId != pNums.FieldType.Button.GetHashCode() && field.surfaceFieldTypeId != pNums.FieldType.Text.GetHashCode() && field.surfaceFieldTypeId != pNums.FieldType.Time.GetHashCode() && field.surfaceFieldTypeId != pNums.FieldType.FormulaField.GetHashCode() && field.surfaceFieldTypeId != pNums.FieldType.Caption.GetHashCode() && field.surfaceFieldTypeId != pNums.FieldType.Image.GetHashCode() && field.surfaceFieldTypeId != pNums.FieldType.BarcodeScanner.GetHashCode()) { fieldBuilder.AppendLine(""); fieldBuilder.AppendLine(""); } //CVH 2017-03-29 Apply styling text colour action string stylingTextColourRule = String.Empty; string stylingTextColourValue = String.Empty; string stylingTextColourColour = String.Empty; if (field.actionType == stylingTextColourAction.actionType && field.action == stylingTextColourAction.recId && field.actionValue != String.Empty) { // Rule|Value|Colour eg "<|60|Red" int styleCount = 0; foreach (string style in field.actionValue.Split('|')) { if (styleCount == 0) { stylingTextColourRule = style; } else if (styleCount == 1) { stylingTextColourValue = style; } else if (styleCount == 2) { stylingTextColourColour = style; } styleCount++; } } /* CVH - 2016-01-20 */ if (field.isReadOnly) { string txtCss = ""; //build control based on type pNums.FieldType typ = (pNums.FieldType)Enum.ToObject(typeof(pNums.FieldType), field.surfaceFieldTypeId); switch (typ) { #region Text /* CVH 2016-01-29 Add Max Length to all textboxes. When 0, no limit */ case pNums.FieldType.Text: txtCss = ""; //CVH 2017-06-13 Add styling action to Text, rule Always if (stylingTextColourColour != String.Empty && stylingTextColourRule == "*") { txtCss = stylingTextColourColour == "Red" ? "surfaceStylingTextColourRed" : ""; } fieldBuilder.AppendLine(""); fieldBuilder.AppendLine(""); fieldBuilder.AppendLine(""); break; #endregion #region Number case pNums.FieldType.Number: fieldBuilder.AppendLine(""); fieldBuilder.AppendLine(""); fieldBuilder.AppendLine(""); break; #endregion #region Decimal case pNums.FieldType.Decimal: if (field.isCurrency) { fieldBuilder.AppendLine(""); string decimalCss = String.Empty; //LABEL string decimalCssL = "\"form-control\""; if (stylingTextColourColour != String.Empty && stylingTextColourRule != String.Empty && stylingTextColourRule != "*" && stylingTextColourValue != String.Empty) { decimalCssL = "'<%# \"form-control \" + (Convert.ToDecimal( String.IsNullOrEmpty( DataBinder.Eval(Container, \"DataItem." + field.surfaceFieldName + "\").ToString() ) ? \"0\" : DataBinder.Eval(Container, \"DataItem." + field.surfaceFieldName + "\") ) " + stylingTextColourRule + " " + stylingTextColourValue + " ? \"" + (stylingTextColourColour == "Red" ? "surfaceStylingTextColourRed" : "") + "\": \"\") %>'"; } else if (stylingTextColourColour != String.Empty && stylingTextColourRule == "*") { decimalCssL = "\"form-control " + (stylingTextColourColour == "Red" ? "surfaceStylingTextColourRed" : "") + "\""; } //CVH 2017-03-01 Show same style as textbox string currencySymbol = "R"; fieldBuilder.AppendLine("
"); fieldBuilder.AppendLine("" + currencySymbol + ""); fieldBuilder.AppendLine(""); fieldBuilder.AppendLine("
"); //TEXTBOX decimalCss = "\"form-control\""; if (stylingTextColourColour != String.Empty && stylingTextColourRule != String.Empty && stylingTextColourRule != "*" && stylingTextColourValue != String.Empty) { decimalCss = "'<%# \"form-control \" + (Convert.ToDecimal( String.IsNullOrEmpty( DataBinder.Eval(Container, \"DataItem." + field.surfaceFieldName + "\").ToString() ) ? \"0\" : DataBinder.Eval(Container, \"DataItem." + field.surfaceFieldName + "\") ) " + stylingTextColourRule + " " + stylingTextColourValue + " ? \"" + (stylingTextColourColour == "Red" ? "surfaceStylingTextColourRed" : "") + "\": \"\") %>'"; } else if (stylingTextColourColour != String.Empty && stylingTextColourRule == "*") { decimalCss = "\"form-control " + (stylingTextColourColour == "Red" ? "surfaceStylingTextColourRed" : "") + "\""; } fieldBuilder.AppendLine("
"); fieldBuilder.AppendLine("" + currencySymbol + ""); fieldBuilder.AppendLine(""); fieldBuilder.AppendLine("
"); } else { fieldBuilder.AppendLine(""); fieldBuilder.AppendLine(""); fieldBuilder.AppendLine(""); } break; #endregion #region Picklist case pNums.FieldType.Picklist: //CVH 2017 - 04 - 05 Enable wants reason on grid ArrayList lookupList = xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceLookup), "categoryId", field.lookupCategory.ToString(), "sequence"); StringBuilder ddlItems = new StringBuilder(); string ddlReasonValues = String.Empty; foreach (oSurfaceLookup look in lookupList) { ddlItems.AppendLine("" + look.display + ""); if (look.wantsReason) ddlReasonValues += " " + look.recId; } fieldBuilder.AppendLine("
"); fieldBuilder.AppendLine(""); fieldBuilder.AppendLine("select.."); fieldBuilder.AppendLine(ddlItems.ToString()); fieldBuilder.AppendLine(""); fieldBuilder.AppendLine(""); //used to stored selected value in javascript, otherwise can't get selected value on responsive grid fieldBuilder.AppendLine(""); fieldBuilder.AppendLine("
"); //ArrayList lookupList = xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceLookup), "categoryId", field.lookupCategory.ToString(), "sequence"); //fieldBuilder.AppendLine(""); //fieldBuilder.AppendLine("select.."); //foreach (oSurfaceLookup look in lookupList) //{ // fieldBuilder.AppendLine("" + look.display + ""); //} //fieldBuilder.AppendLine(""); break; #endregion #region Date case pNums.FieldType.Date: //CVH 2017-06-09 Cater for date format yyyy/MM/dd //CVH 2018-07-25 Sort YearMonth format in date format, not text format, otherwise August shows before January //CVH 2017-03-30 Cater for Year and Year/Month if (field.surfaceDateTypeId == pNums.SurfaceDateType.Year.GetHashCode()) { fieldBuilder.AppendLine(""); fieldBuilder.AppendLine(""); fieldBuilder.AppendLine("
"); fieldBuilder.AppendLine(""); fieldBuilder.AppendLine("
"); fieldBuilder.AppendLine(""); fieldBuilder.AppendLine("
"); fieldBuilder.AppendLine("
"); } else if (field.surfaceDateTypeId == pNums.SurfaceDateType.MonthYear.GetHashCode()) { //fieldBuilder.AppendLine(""); fieldBuilder.AppendLine(""); fieldBuilder.AppendLine(""); fieldBuilder.AppendLine("
"); fieldBuilder.AppendLine(""); fieldBuilder.AppendLine("
"); fieldBuilder.AppendLine(""); fieldBuilder.AppendLine("
"); fieldBuilder.AppendLine("
"); } else { fieldBuilder.AppendLine(""); fieldBuilder.AppendLine(""); //CVH 2017-07-18 Remove data-provide=\"datepicker-inline\" - causes double calendar fieldBuilder.AppendLine("
"); fieldBuilder.AppendLine(""); fieldBuilder.AppendLine("
"); fieldBuilder.AppendLine(""); fieldBuilder.AppendLine("
"); fieldBuilder.AppendLine("
"); //default dd/MM/yyyy string regularExp = "^(((((0[1-9])|(1\\d)|(2[0-8]))\\/((0[1-9])|(1[0-2])))|((31\\/((0[13578])|(1[02])))|((29|30)\\/((0[1,3-9])|(1[0-2])))))\\/((20[0-9][0-9])|(19[0-9][0-9])))|((29\\/02\\/(19|20)(([02468][048])|([13579][26]))))$"; if (utils.displayDateFormat() == "yyyy/MM/dd") regularExp = "^(((20[0-9][0-9])|(19[0-9][0-9]))\\/((((0[1-9])|(1[0-2]))\\/((0[1-9])|(1\\d)|(2[0-8])))|((((0[13578])|(1[02]))\\/31)|(((0[1,3-9])|(1[0-2]))\\/(29|30)))))|(((19|20)(([02468][048])|([13579][26]))\\/02\\/29))$"; fieldBuilder.AppendLine(""); } //fieldBuilder.AppendLine(""); //fieldBuilder.AppendLine(""); //fieldBuilder.AppendLine(""); //fieldBuilder.AppendLine(""); break; #endregion #region Time case pNums.FieldType.Time: fieldBuilder.AppendLine(""); fieldBuilder.AppendLine(""); fieldBuilder.AppendLine("
"); fieldBuilder.AppendLine(""); fieldBuilder.AppendLine("
"); fieldBuilder.AppendLine(""); fieldBuilder.AppendLine("
"); fieldBuilder.AppendLine("
"); break; #endregion #region Checkbox case pNums.FieldType.Checkbox: fieldBuilder.AppendLine(""); //CVH 2017-03-13 Remove pretty checkboxes, they only work if we rebind on Page Init, and that adds too much processing time fieldBuilder.AppendLine(""); fieldBuilder.AppendLine(""); break; #endregion #region RadioButtonList case pNums.FieldType.RadioButtonList: ArrayList radioLookupList = xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceLookup), "categoryId", field.lookupCategory.ToString(), "sequence"); fieldBuilder.AppendLine(""); foreach (oSurfaceLookup look in radioLookupList) { fieldBuilder.AppendLine(""); } fieldBuilder.AppendLine(""); //fieldBuilder.AppendLine(""); break; #endregion #region Button case pNums.FieldType.Button: fieldBuilder.AppendLine(""); break; #endregion #region RelationalField case pNums.FieldType.RelationalField: fieldBuilder.AppendLine(""); break; #endregion #region Attachment case pNums.FieldType.Attachment: fieldBuilder.AppendLine("
"); break; #endregion #region Note case pNums.FieldType.Note: fieldBuilder.AppendLine("
"); break; #endregion #region Debtors case pNums.FieldType.Debtors: fieldBuilder.AppendLine("
"); break; case pNums.FieldType.Composite: fieldBuilder.AppendLine("
"); break; #endregion #region FormulaField //JR Bas-Pro-4 case pNums.FieldType.FormulaField: fieldBuilder.AppendLine(""); break; #endregion #region CheckboxList case pNums.FieldType.CheckboxList: fieldBuilder.AppendLine(""); break; #endregion #region MultiPicklist case pNums.FieldType.MultiPicklist: fieldBuilder.AppendLine(""); break; #endregion #region Sales case pNums.FieldType.Sales: fieldBuilder.AppendLine("
"); break; #endregion #region Control case pNums.FieldType.Control: if (field.controlledValue == pNums.Module.Notes.GetHashCode().ToString()) { fieldBuilder.AppendLine("
"); } else { fieldBuilder.AppendLine(""); } break; #endregion #region Caption case pNums.FieldType.Caption: txtCss = ""; if (stylingTextColourColour != String.Empty && stylingTextColourRule == "*") { txtCss = stylingTextColourColour == "Red" ? "surfaceStylingTextColourRed" : ""; } fieldBuilder.AppendLine(""); fieldBuilder.AppendLine(""); fieldBuilder.AppendLine(""); break; #endregion #region Image case pNums.FieldType.Image: fieldBuilder.AppendLine(""); break; #endregion #region BarcodeScanner case pNums.FieldType.BarcodeScanner: txtCss = ""; if (stylingTextColourColour != String.Empty && stylingTextColourRule == "*") { txtCss = stylingTextColourColour == "Red" ? "surfaceStylingTextColourRed" : ""; } fieldBuilder.AppendLine(""); fieldBuilder.AppendLine(""); fieldBuilder.AppendLine(""); break; #endregion } } else { string txtCss = ""; //build control based on type pNums.FieldType typ = (pNums.FieldType)Enum.ToObject(typeof(pNums.FieldType), field.surfaceFieldTypeId); switch (typ) { #region Text /* CVH 2016-01-29 Add MaxLength property. When 0 it's unlimited */ case pNums.FieldType.Text: //CVH 2017-06-13 Add styling action to Text, rule Always txtCss = ""; if (stylingTextColourColour != String.Empty && stylingTextColourRule == "*") { txtCss = stylingTextColourColour == "Red" ? "surfaceStylingTextColourRed" : ""; } fieldBuilder.AppendLine(""); fieldBuilder.AppendLine(""); fieldBuilder.AppendLine(""); break; #endregion #region Number case pNums.FieldType.Number: string numberWidthStyle = ""; if (field.length > 0) { int numberSize = field.length * 10; numberWidthStyle = "style=\"width:" + numberSize.ToString() + "px\""; } //CVH 2017-03-29 Surface Action Styling Text Colour fieldBuilder.AppendLine(""); string numberCssL = "\"nowrap surfaceView" + field.surfaceFieldName + "\""; if (stylingTextColourColour != String.Empty && stylingTextColourRule != String.Empty && stylingTextColourRule != "*" && stylingTextColourValue != String.Empty) { numberCssL = "'<%# \"nowrap surfaceView" + field.surfaceFieldName + " \" + (Convert.ToInt32((DataBinder.Eval(Container, \"DataItem." + field.surfaceFieldName + "\")).ToString()==\"\"?0:DataBinder.Eval(Container, \"DataItem." + field.surfaceFieldName + "\"))" + stylingTextColourRule + " " + stylingTextColourValue + " ? \"" + (stylingTextColourColour == "Red" ? "surfaceStylingTextColourRed" : "") + "\": \"\") %>'"; } else if (stylingTextColourColour != String.Empty && stylingTextColourRule == "*") { numberCssL = "\"form-control " + (stylingTextColourColour == "Red" ? "surfaceStylingTextColourRed" : "") + "\""; } fieldBuilder.AppendLine(""); string numberCss = "\"form-control batchEdit noShow\""; if (stylingTextColourColour != String.Empty && stylingTextColourRule != String.Empty && stylingTextColourRule != "*" && stylingTextColourValue != String.Empty) { numberCss = "'<%# \"form-control batchEdit noShow \" + (Convert.ToInt32((DataBinder.Eval(Container, \"DataItem." + field.surfaceFieldName + "\")).ToString()==\"\"?0:DataBinder.Eval(Container, \"DataItem." + field.surfaceFieldName + "\"))" + stylingTextColourRule + " " + stylingTextColourValue + " ? \"" + (stylingTextColourColour == "Red" ? "surfaceStylingTextColourRed" : "") + "\": \"\") %>'"; } else if (stylingTextColourColour != String.Empty && stylingTextColourRule == "*") { numberCss = "\"form-control " + (stylingTextColourColour == "Red" ? "surfaceStylingTextColourRed" : "") + "\""; } fieldBuilder.AppendLine(""); break; #endregion #region Decimal case pNums.FieldType.Decimal: string decimalWidthStyle = ""; if (field.length > 0) { int numberSize = field.length * 10; decimalWidthStyle = "style=\"width:" + numberSize.ToString() + "px\""; } int decimalSize = field.length * 10; fieldBuilder.AppendLine(""); //CVH 2017 - 03 - 29 Surface Action Styling Text Colour string decimalCss = String.Empty; string decimalCssL = String.Empty; if (field.isCurrency) { //LABEL decimalCssL = "\"form-control\""; if (stylingTextColourColour != String.Empty && stylingTextColourRule != String.Empty && stylingTextColourRule != "*" && stylingTextColourValue != String.Empty) { decimalCssL = "'<%# \"form-control \" + (Convert.ToDecimal( String.IsNullOrEmpty( DataBinder.Eval(Container, \"DataItem." + field.surfaceFieldName + "\").ToString() ) ? \"0\" : DataBinder.Eval(Container, \"DataItem." + field.surfaceFieldName + "\") ) " + stylingTextColourRule + " " + stylingTextColourValue + " ? \"" + (stylingTextColourColour == "Red" ? "surfaceStylingTextColourRed" : "") + "\": \"\") %>'"; } else if (stylingTextColourColour != String.Empty && stylingTextColourRule == "*") { decimalCssL = "\"form-control " + (stylingTextColourColour == "Red" ? "surfaceStylingTextColourRed" : "") + "\""; } //CVH 2017-03-01 Show same style as textbox string currencySymbol = "R"; fieldBuilder.AppendLine("
"); fieldBuilder.AppendLine("" + currencySymbol + ""); fieldBuilder.AppendLine(""); fieldBuilder.AppendLine("
"); //TEXTBOX decimalCss = "\"form-control\""; if (stylingTextColourColour != String.Empty && stylingTextColourRule != String.Empty && stylingTextColourRule != "*" && stylingTextColourValue != String.Empty) { decimalCss = "'<%# \"form-control \" + (Convert.ToDecimal( String.IsNullOrEmpty( DataBinder.Eval(Container, \"DataItem." + field.surfaceFieldName + "\").ToString() ) ? \"0\" : DataBinder.Eval(Container, \"DataItem." + field.surfaceFieldName + "\") ) " + stylingTextColourRule + " " + stylingTextColourValue + " ? \"" + (stylingTextColourColour == "Red" ? "surfaceStylingTextColourRed" : "") + "\": \"\") %>'"; } else if (stylingTextColourColour != String.Empty && stylingTextColourRule == "*") { decimalCss = "\"form-control " + (stylingTextColourColour == "Red" ? "surfaceStylingTextColourRed" : "") + "\""; } fieldBuilder.AppendLine("
"); fieldBuilder.AppendLine("" + currencySymbol + ""); fieldBuilder.AppendLine(""); fieldBuilder.AppendLine("
"); } else { //LABEL decimalCssL = "\"nowrap surfaceView" + field.surfaceFieldName + "\""; if (stylingTextColourColour != String.Empty && stylingTextColourRule != String.Empty && stylingTextColourRule != "*" && stylingTextColourValue != String.Empty) { decimalCssL = "'<%# \"nowrap surfaceView" + field.surfaceFieldName + " \" + (Convert.ToDecimal( String.IsNullOrEmpty( DataBinder.Eval(Container, \"DataItem." + field.surfaceFieldName + "\").ToString() ) ? \"0\" : DataBinder.Eval(Container, \"DataItem." + field.surfaceFieldName + "\") ) " + stylingTextColourRule + " " + stylingTextColourValue + " ? \"" + (stylingTextColourColour == "Red" ? "surfaceStylingTextColourRed" : "") + "\": \"\") %>'"; } else if (stylingTextColourColour != String.Empty && stylingTextColourRule == "*") { decimalCssL = "\"form-control " + (stylingTextColourColour == "Red" ? "surfaceStylingTextColourRed" : "") + "\""; } fieldBuilder.AppendLine(""); //TEXTBOX decimalCss = "\"form-control batchEdit noShow\""; if (stylingTextColourColour != String.Empty && stylingTextColourRule != String.Empty && stylingTextColourRule != "*" && stylingTextColourValue != String.Empty) { decimalCss = "'<%# \"form-control batchEdit noShow \" + (Convert.ToDecimal( String.IsNullOrEmpty( DataBinder.Eval(Container, \"DataItem." + field.surfaceFieldName + "\").ToString() ) ? \"0\" : DataBinder.Eval(Container, \"DataItem." + field.surfaceFieldName + "\") ) " + stylingTextColourRule + " " + stylingTextColourValue + " ? \"" + (stylingTextColourColour == "Red" ? "surfaceStylingTextColourRed" : "") + "\": \"\") %>'"; } else if (stylingTextColourColour != String.Empty && stylingTextColourRule == "*") { decimalCss = "\"form-control " + (stylingTextColourColour == "Red" ? "surfaceStylingTextColourRed" : "") + "\""; } fieldBuilder.AppendLine(""); } break; #endregion #region Picklist case pNums.FieldType.Picklist: //CVH 2017-04-05 Enable wants reason on grid ArrayList lookupList = xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceLookup), "categoryId", field.lookupCategory.ToString(), "sequence"); StringBuilder ddlItems = new StringBuilder(); string ddlReasonValues = String.Empty; foreach (oSurfaceLookup look in lookupList) { ddlItems.AppendLine("" + look.display + ""); if (look.wantsReason) ddlReasonValues += " " + look.recId; } //CVH 2017-04-06 Always call change, otherwise Selected textbox doesn't get value, and then row edit doesn't work string ddlClientClick = " onchange=\"PicklistEnableReasonGrid(this, '" + field.surfaceFieldName + "');\" "; fieldBuilder.AppendLine("
"); fieldBuilder.AppendLine(""); fieldBuilder.AppendLine("select.."); fieldBuilder.AppendLine(ddlItems.ToString()); fieldBuilder.AppendLine(""); fieldBuilder.AppendLine(""); //used to stored selected value in javascript, otherwise can't get selected value on responsive grid fieldBuilder.AppendLine(""); fieldBuilder.AppendLine("
"); //fieldBuilder.AppendLine(""); //fieldBuilder.AppendLine("select.."); //foreach (oSurfaceLookup look in lookupList) //{ // fieldBuilder.AppendLine("" + look.display + ""); //} //fieldBuilder.AppendLine(""); break; #endregion #region Date case pNums.FieldType.Date: //CVH 2017-06-09 Cater for date format yyyy/MM/dd //CVH 2018-07-25 Sort YearMonth format in date format, not text format, otherwise August shows before January /* * if (ctrl.surfaceDateTypeId == pNums.SurfaceDateType.Year.GetHashCode()) { formBuilder.AppendLine("
"); formBuilder.AppendLine(""); formBuilder.AppendLine("
"); formBuilder.AppendLine(""); formBuilder.AppendLine("
"); formBuilder.AppendLine("
"); } //CVH 2016-10-06 Cater for Month/Year date type else if (ctrl.surfaceDateTypeId == pNums.SurfaceDateType.MonthYear.GetHashCode()) { formBuilder.AppendLine("
"); formBuilder.AppendLine(""); formBuilder.AppendLine("
"); formBuilder.AppendLine(""); formBuilder.AppendLine("
"); formBuilder.AppendLine("
"); } else { formBuilder.AppendLine("
"); formBuilder.AppendLine(""); formBuilder.AppendLine("
"); formBuilder.AppendLine(""); formBuilder.AppendLine("
"); formBuilder.AppendLine("
"); formBuilder.AppendLine(""); } */ //CVH 2017-03-30 Cater for Year and Year/Month if (field.surfaceDateTypeId == pNums.SurfaceDateType.Year.GetHashCode()) { fieldBuilder.AppendLine(""); fieldBuilder.AppendLine(""); fieldBuilder.AppendLine("
"); fieldBuilder.AppendLine(""); fieldBuilder.AppendLine("
"); fieldBuilder.AppendLine(""); fieldBuilder.AppendLine("
"); fieldBuilder.AppendLine("
"); } else if (field.surfaceDateTypeId == pNums.SurfaceDateType.MonthYear.GetHashCode()) { //fieldBuilder.AppendLine(""); fieldBuilder.AppendLine(""); fieldBuilder.AppendLine(""); fieldBuilder.AppendLine("
"); fieldBuilder.AppendLine(""); fieldBuilder.AppendLine("
"); fieldBuilder.AppendLine(""); fieldBuilder.AppendLine("
"); fieldBuilder.AppendLine("
"); } else { fieldBuilder.AppendLine(""); fieldBuilder.AppendLine(""); //CVH 2017-07-18 Remove data-provide=\"datepicker-inline\" - causes double calendar fieldBuilder.AppendLine("
"); fieldBuilder.AppendLine(""); fieldBuilder.AppendLine("
"); fieldBuilder.AppendLine(""); fieldBuilder.AppendLine("
"); fieldBuilder.AppendLine("
"); //default dd/MM/yyyy string regularExp = "^(((((0[1-9])|(1\\d)|(2[0-8]))\\/((0[1-9])|(1[0-2])))|((31\\/((0[13578])|(1[02])))|((29|30)\\/((0[1,3-9])|(1[0-2])))))\\/((20[0-9][0-9])|(19[0-9][0-9])))|((29\\/02\\/(19|20)(([02468][048])|([13579][26]))))$"; if (utils.displayDateFormat() == "yyyy/MM/dd") regularExp = "^(((20[0-9][0-9])|(19[0-9][0-9]))\\/((((0[1-9])|(1[0-2]))\\/((0[1-9])|(1\\d)|(2[0-8])))|((((0[13578])|(1[02]))\\/31)|(((0[1,3-9])|(1[0-2]))\\/(29|30)))))|(((19|20)(([02468][048])|([13579][26]))\\/02\\/29))$"; fieldBuilder.AppendLine(""); } //fieldBuilder.AppendLine(""); //fieldBuilder.AppendLine(""); //fieldBuilder.AppendLine(""); //fieldBuilder.AppendLine(""); break; #endregion #region Time case pNums.FieldType.Time: fieldBuilder.AppendLine(""); fieldBuilder.AppendLine(""); fieldBuilder.AppendLine("
"); fieldBuilder.AppendLine(""); fieldBuilder.AppendLine("
"); fieldBuilder.AppendLine(""); fieldBuilder.AppendLine("
"); fieldBuilder.AppendLine("
"); //not working on server //string regularTime = "^(([0-1][0-9])|(2[0-3])):[0-5][0-9]$"; //fieldBuilder.AppendLine(""); break; #endregion #region Checkbox case pNums.FieldType.Checkbox: fieldBuilder.AppendLine(""); //CVH 2017-03-13 Remove pretty checkboxes, they only work if we rebind on Page Init, and that adds too much processing time fieldBuilder.AppendLine(""); fieldBuilder.AppendLine(""); break; #endregion #region RadioButtonList case pNums.FieldType.RadioButtonList: //CVH 2017-04-05 Enable radiobuttonlist on grid, built as dropdown ArrayList radioLookupList = xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceLookup), "categoryId", field.lookupCategory.ToString(), "sequence"); StringBuilder ddlrblItems = new StringBuilder(); string ddlrblReasonValues = String.Empty; foreach (oSurfaceLookup look in radioLookupList) { ddlrblItems.AppendLine("" + look.display + ""); if (look.wantsReason) ddlrblReasonValues += " " + look.recId; } //CVH 2017-04-06 Always call change, otherwise Selected textbox doesn't get value, and then row edit doesn't work string ddlrblClientClick = " onchange=\"PicklistEnableReasonGrid(this, '" + field.surfaceFieldName + "');\" "; fieldBuilder.AppendLine("
"); fieldBuilder.AppendLine(""); fieldBuilder.AppendLine("select.."); fieldBuilder.AppendLine(ddlrblItems.ToString()); fieldBuilder.AppendLine(""); fieldBuilder.AppendLine(""); //used to stored selected value in javascript, otherwise can't get selected value on responsive grid fieldBuilder.AppendLine(""); fieldBuilder.AppendLine("
"); break; #endregion #region Button case pNums.FieldType.Button: fieldBuilder.AppendLine(""); break; #endregion #region RelationalField /* CVH 2016-01-22 RelField */ case pNums.FieldType.RelationalField: fieldBuilder.AppendLine(""); break; #endregion #region Attachment case pNums.FieldType.Attachment: fieldBuilder.AppendLine("
"); break; #endregion #region Link case pNums.FieldType.Link: fieldBuilder.AppendLine("
"); break; #endregion #region Note case pNums.FieldType.Note: fieldBuilder.AppendLine("
"); break; #endregion #region Debtors case pNums.FieldType.Debtors: fieldBuilder.AppendLine("
"); break; #endregion #region FormulaField case pNums.FieldType.FormulaField: if (field.isCurrency) { //LABEL decimalCssL = "\"form-control\""; if (stylingTextColourColour != String.Empty && stylingTextColourRule != String.Empty && stylingTextColourRule != "*" && stylingTextColourValue != String.Empty) { decimalCssL = "'<%# \"form-control \" + (Convert.ToDecimal( String.IsNullOrEmpty( DataBinder.Eval(Container, \"DataItem." + field.surfaceFieldName + "\").ToString() ) ? \"0\" : DataBinder.Eval(Container, \"DataItem." + field.surfaceFieldName + "\") ) " + stylingTextColourRule + " " + stylingTextColourValue + " ? \"" + (stylingTextColourColour == "Red" ? "surfaceStylingTextColourRed" : "") + "\": \"\") %>'"; } else if (stylingTextColourColour != String.Empty && stylingTextColourRule == "*") { decimalCssL = "\"form-control " + (stylingTextColourColour == "Red" ? "surfaceStylingTextColourRed" : "") + "\""; } //CVH 2017-03-01 Show same style as textbox string currencySymbol = "R"; fieldBuilder.AppendLine("
"); fieldBuilder.AppendLine("" + currencySymbol + ""); fieldBuilder.AppendLine(""); fieldBuilder.AppendLine("
"); } else { fieldBuilder.AppendLine(""); fieldBuilder.AppendLine(""); //CVH 2017-02-09 No edit functionality built for formula fields yet. Only Divide formula required for now, and only needs to be a label fieldBuilder.AppendLine(""); } break; #endregion #region Composite case pNums.FieldType.Composite: fieldBuilder.AppendLine("
"); break; #endregion #region CheckboxList case pNums.FieldType.CheckboxList: fieldBuilder.AppendLine(""); break; #endregion #region MultiPicklist case pNums.FieldType.MultiPicklist: ArrayList multiLookupList = xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceLookup), "categoryId", field.lookupCategory.ToString(), "sequence"); fieldBuilder.AppendLine(""); foreach (oSurfaceLookup look in multiLookupList) { fieldBuilder.AppendLine("" + look.display + ""); } fieldBuilder.AppendLine(""); break; #endregion #region Sales case pNums.FieldType.Sales: fieldBuilder.AppendLine("
"); break; #endregion #region Control case pNums.FieldType.Control: if (field.controlledValue == pNums.Module.Notes.GetHashCode().ToString()) { fieldBuilder.AppendLine("
"); } else { fieldBuilder.AppendLine(""); } break; #endregion #region Caption case pNums.FieldType.Caption: txtCss = ""; if (stylingTextColourColour != String.Empty && stylingTextColourRule == "*") { txtCss = stylingTextColourColour == "Red" ? "surfaceStylingTextColourRed" : ""; } fieldBuilder.AppendLine(""); fieldBuilder.AppendLine(""); fieldBuilder.AppendLine(""); //fieldBuilder.AppendLine(""); break; #endregion #region Image case pNums.FieldType.Image: fieldBuilder.AppendLine(""); break; #endregion #region BarcodeScanner case pNums.FieldType.BarcodeScanner: txtCss = ""; if (stylingTextColourColour != String.Empty && stylingTextColourRule == "*") { txtCss = stylingTextColourColour == "Red" ? "surfaceStylingTextColourRed" : ""; } fieldBuilder.AppendLine(""); fieldBuilder.AppendLine(""); fieldBuilder.AppendLine(""); break; #endregion } } fieldBuilder.AppendLine(""); } } result = fieldBuilder.ToString(); } catch (Exception ex) { exception.HandleException("handler:", MethodBase.GetCurrentMethod().Name, ex, HttpContext.Current.Session["user"]); } return result; } /// /// Build Surface Grid Field Data /// /// private static string BuildSurfaceForm(oSurface _surface, bool isView, ref string valSummaryTabs, bool isChild = false, string fieldName = "", int parentSurfaceId = 0) { string result = String.Empty; string prefix = "f"; StringBuilder formBuilder = new StringBuilder(); StringBuilder valSumBuilder = new StringBuilder(); try { //build child panel if (isChild) { ArrayList list = xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceGridOptions), "surfaceId", _surface.recId.ToString()); oSurfaceGridOptions gridOptions = new oSurfaceGridOptions(); if (list != null && list.Count > 0) gridOptions = (oSurfaceGridOptions)list[0]; formBuilder.AppendLine(""); if (gridOptions.allowAdd) { formBuilder.AppendLine("
"); formBuilder.AppendLine("
"); formBuilder.AppendLine(""); formBuilder.AppendLine("
"); formBuilder.AppendLine("
"); formBuilder.AppendLine("

"); formBuilder.AppendLine("
"); } } //build headergroup ArrayList headerGroup = xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceField), "surfaceId,isActive,surfaceFieldTypeId", _surface.recId + ",1," + pNums.FieldType.HeaderGroup.GetHashCode(), "sequence"); if (headerGroup.Count > 0) { if (isView) { formBuilder.AppendLine(BuildSurfaceGroupView(headerGroup, _surface)); } else { formBuilder.AppendLine(BuildSurfaceGroupControls(headerGroup, _surface, prefix + "HeaderGroup")); } } //CVH 2017-02-14 Subtabs. fieldTabs should be only primary tabs, where parentId = 0 ArrayList fieldTabs = new ArrayList(); if (isView) { if (isChild) prefix = "v_" + _surface.recId.ToString() + "_"; else prefix = "v"; fieldTabs = xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceField), "surfaceId,isActive,parentId,surfaceFieldTypeId", _surface.recId + ",1,0," + pNums.FieldType.Tab.GetHashCode(), "sequence"); } else { fieldTabs = xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceField), "surfaceId,isActive,isReadOnly,parentId,surfaceFieldTypeId", _surface.recId + ",1,0,0," + pNums.FieldType.Tab.GetHashCode(), "sequence"); } if (fieldTabs.Count > 1)//make tabs { //CVH 2017-11-15 Adding a class that hides the tab panel until the correct tab is shown (prevent/limit jumping of tabs on screen), and a class to ID formBuilder.AppendLine("
"); //CVH 2016-12-18 Build Hidden Tab Index label unique per surface - only build 1 label, can be used for view and form //CVH 2017-03-28 No longer used. Using cookies. //if (!isView) // formBuilder.AppendLine(""); //nav tabs //formBuilder.AppendLine("
    "); //formBuilder.AppendLine("
      "); //CVH 2017-06-22 Remove sortable tabs //CVH 2017-10-06 Don't use prefix for surfaceTabs, always use fsurfaceTabs in javascript, and don't need to differentiate, on seperate controls if (_surface.navAsPills) { formBuilder.AppendLine("
        "); } else { formBuilder.AppendLine("
          "); } int navCounter = 0; foreach (oSurfaceField navTab in fieldTabs) { navCounter++; string displayText = navTab.controlText != "" ? navTab.controlText : navTab.surfaceFieldDisplay; //CVH 2016-12-20 Call different javascript methods for wizards and non-wizards if (_surface.isWizzard) { if (navCounter == 1) formBuilder.AppendLine("
        • "); else { if (!isView) formBuilder.AppendLine("
        • "); else formBuilder.AppendLine("
        • "); } } else { //send prefix f to javascript method, view can also use form label index if (navCounter == 1) formBuilder.AppendLine("
        • "); else formBuilder.AppendLine("
        • "); } } formBuilder.AppendLine("
        "); //tab panes formBuilder.AppendLine("
        "); int tabCounter = 0; string tabFreeze = "tab-freeze"; //build tab panels foreach (oSurfaceField tabPanel in fieldTabs) { tabCounter++; if (tabCounter == 1) formBuilder.AppendLine("
        "); else { formBuilder.AppendLine("
        "); } if (!_surface.isWizzard) formBuilder.AppendLine(""); //now build groups by fetching groups belonging to this panel //********* ArrayList fieldGroups = xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceField), "surfaceId,isActive,surfaceFieldTypeId,parentId", _surface.recId + ",1," + pNums.FieldType.Group.GetHashCode() + "," + tabPanel.recId, "sequence"); //CVH 2017-02-14 Subtabs. Instead of sending all groups to Build method, loop through groups, determine if group has Subtab linked to it, and then send single group to Build method foreach (oSurfaceField grpField in fieldGroups) { //get subtab linked to group if any ArrayList subTabs = xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceField), "surfaceId,isActive,surfaceFieldTypeId,parentId", _surface.recId + ",1," + pNums.FieldType.Tab.GetHashCode() + "," + grpField.recId, "sequence"); if (subTabs.Count > 0) { //set parent tab details for js oSurfaceField navTab = (oSurfaceField)xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceField), "recId,isActive,surfaceFieldTypeId", grpField.parentId.ToString() + ",1," + pNums.FieldType.Tab.GetHashCode())[0]; //build group formBuilder.AppendLine("
        "); //heading formBuilder.AppendLine("
        "); if (grpField.isControlled) formBuilder.AppendLine(""); else formBuilder.AppendLine(""); formBuilder.AppendLine(grpField.controlText != "" ? grpField.controlText : grpField.surfaceFieldDisplay); //formBuilder.AppendLine(""); //formBuilder.AppendLine(""); //formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); //end of heading //toggle panel formBuilder.AppendLine("
        "); //build body of formBuilder.AppendLine("
        "); //build tabs formBuilder.AppendLine("
        "); //nav tabs //formBuilder.AppendLine("
          "); //CVH 2017-06-22 Remove sortable tabs //CVH 2017-10-06 Don't use prefix, always use f, javascript uses f. No need to differentiate, on different controls. if (_surface.navAsPills) { formBuilder.AppendLine("
            "); } else { formBuilder.AppendLine("
              "); } int navCounterSub = 0; foreach (oSurfaceField navTabSub in subTabs) { navCounterSub++; string displayText = navTabSub.controlText != "" ? navTabSub.controlText : navTabSub.surfaceFieldDisplay; if (navCounterSub == 1) formBuilder.AppendLine("
            • "); else formBuilder.AppendLine("
            • "); } formBuilder.AppendLine("
            "); //tab panes formBuilder.AppendLine("
            "); int tabCounterSub = 0; //build tab panels foreach (oSurfaceField tabPanelSub in subTabs) { tabCounterSub++; if (tabCounterSub == 1) formBuilder.AppendLine("
            "); else { formBuilder.AppendLine("
            "); } formBuilder.AppendLine(""); //now build groups by fetching groups belonging to this subTab ArrayList subTabGroups = xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceField), "surfaceId,isActive,surfaceFieldTypeId,parentId", _surface.recId + ",1," + pNums.FieldType.Group.GetHashCode() + "," + tabPanelSub.recId, "sequence"); if (isView) { formBuilder.AppendLine(BuildSurfaceGroupView(subTabGroups, _surface, isChild, true)); } else { formBuilder.AppendLine(BuildSurfaceGroupControls(subTabGroups, _surface, prefix + tabPanelSub.surfaceFieldName, true)); } formBuilder.AppendLine("
            "); //end of tab panel } formBuilder.AppendLine("
            "); //end of tab panes formBuilder.AppendLine("
            "); formBuilder.AppendLine("
        "); //end of body formBuilder.AppendLine("
        "); //end toggle panel formBuilder.AppendLine("
        "); } else { ArrayList singleGrp = new ArrayList(); singleGrp.Add(grpField); if (isView) { formBuilder.AppendLine(BuildSurfaceGroupView(singleGrp, _surface, isChild)); } else { formBuilder.AppendLine(BuildSurfaceGroupControls(singleGrp, _surface, prefix + tabPanel.surfaceFieldName)); } } } //CVH 2017-01-09 Build validation summary per tab, otherwise validators don't work for power+ users that don't have wizard if (_surface.isWizzard) valSumBuilder.AppendLine(""); //****** //CVH 2016-12-09 Build Non wizard tab next & previous buttons. Only on form, not on view if (!_surface.isWizzard && !isView) { formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine(" "); formBuilder.AppendLine(" "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); } formBuilder.AppendLine("
        "); //end of tab panel } formBuilder.AppendLine("
        "); //end of tab panes formBuilder.AppendLine("
        "); //end of tab panel } else if (fieldTabs.Count == 1) //build groups without tabs //CVH 2017-03-28 Don't process if there are no tabs { formBuilder.AppendLine("
        "); //CVH 2017-03-28 Only get groups for specific tab, otherwise it breaks where sub tabs ArrayList fieldGroups = xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceField), "surfaceId,isActive,surfaceFieldTypeId,parentId", _surface.recId + ",1," + pNums.FieldType.Group.GetHashCode() + "," + ((oSurfaceField)fieldTabs[0]).recId, "sequence"); //CVH 2017-02-14 Subtabs. Instead of sending all groups to Build method, loop through groups, determine if group has Subtab linked to it, and then send single group to Build method foreach (oSurfaceField grpField in fieldGroups) { //get subtab linked to group if any ArrayList subTabs = xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceField), "surfaceId,isActive,surfaceFieldTypeId,parentId", _surface.recId + ",1," + pNums.FieldType.Tab.GetHashCode() + "," + grpField.recId, "sequence"); if (subTabs.Count > 0) { //set parent tab details for js oSurfaceField navTab = (oSurfaceField)xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceField), "recId,isActive,surfaceFieldTypeId", grpField.parentId.ToString() + ",1," + pNums.FieldType.Tab.GetHashCode())[0]; //build group formBuilder.AppendLine("
        "); //heading formBuilder.AppendLine("
        "); formBuilder.AppendLine(grpField.controlText != "" ? grpField.controlText : grpField.surfaceFieldDisplay); formBuilder.AppendLine(""); formBuilder.AppendLine(""); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); //end of heading //toggle panel formBuilder.AppendLine("
        "); //build body of formBuilder.AppendLine("
        "); //build tabs formBuilder.AppendLine("
        "); //nav tabs //formBuilder.AppendLine("
          "); //CVH 2017-06-22 Remove sortable tabs if (_surface.navAsPills) { formBuilder.AppendLine("
            "); } else { formBuilder.AppendLine("
              "); } int navCounterSub = 0; foreach (oSurfaceField navTabSub in subTabs) { navCounterSub++; string displayText = navTabSub.controlText != "" ? navTabSub.controlText : navTabSub.surfaceFieldDisplay; if (navCounterSub == 1) formBuilder.AppendLine("
            • "); else formBuilder.AppendLine("
            • "); } formBuilder.AppendLine("
            "); //tab panes formBuilder.AppendLine("
            "); int tabCounterSub = 0; int i = -1; //build tab panels foreach (oSurfaceField tabPanelSub in subTabs) { i++; tabCounterSub++; if (tabCounterSub == 1) formBuilder.AppendLine("
            "); else { formBuilder.AppendLine("
            "); } formBuilder.AppendLine(""); //now build groups by fetching groups belonging to this subTab ArrayList subTabGroups = xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceField), "surfaceId,isActive,surfaceFieldTypeId,parentId", _surface.recId + ",1," + pNums.FieldType.Group.GetHashCode() + "," + tabPanelSub.recId, "sequence"); if (isView) { formBuilder.AppendLine(BuildSurfaceGroupView(subTabGroups, _surface, isChild)); } else { formBuilder.AppendLine(BuildSurfaceGroupControls(subTabGroups, _surface, prefix + tabPanelSub.surfaceFieldName)); } formBuilder.AppendLine("
            "); //end of tab panel } formBuilder.AppendLine("
            "); //end of tab panes formBuilder.AppendLine("
            "); formBuilder.AppendLine("
        "); //end of body formBuilder.AppendLine("
        "); //end toggle panel formBuilder.AppendLine("
        "); } else { ArrayList singleGrp = new ArrayList(); singleGrp.Add(grpField); if (isView) { formBuilder.AppendLine(BuildSurfaceGroupView(singleGrp, _surface, isChild)); } else { formBuilder.AppendLine(BuildSurfaceGroupControls(singleGrp, _surface, "surface")); } } } formBuilder.AppendLine("
        "); } if (isChild) { formBuilder.AppendLine(""); } valSummaryTabs = valSumBuilder.ToString(); result = formBuilder.ToString(); } catch (Exception ex) { exception.HandleException("handler:", MethodBase.GetCurrentMethod().Name, ex, HttpContext.Current.Session["user"]); } return result; } private static string BuildSurfaceModalStart(oSurface _surface, bool isView) { string result = ""; StringBuilder formBuilder = new StringBuilder(); try { if (_surface.isModal) { formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine("

        "); formBuilder.AppendLine("" + _surface.surface + "

        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); } result = formBuilder.ToString(); } catch (Exception ex) { exception.HandleException("handler:", MethodBase.GetCurrentMethod().Name, ex, HttpContext.Current.Session["user"]); } return result; } private static string BuildSurfaceModalEnd(oSurface _surface) { string result = ""; StringBuilder formBuilder = new StringBuilder(); try { if (_surface.isModal) { formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); } result = formBuilder.ToString(); } catch (Exception ex) { exception.HandleException("handler:", MethodBase.GetCurrentMethod().Name, ex, HttpContext.Current.Session["user"]); } return result; } /// /// Build Surface Grid Field Data /// /// private static string BuildSurfaceEditField(oSurface _surface) { string result = String.Empty; StringBuilder formBuilder = new StringBuilder(); try { formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine("

        "); formBuilder.AppendLine(""); formBuilder.AppendLine("

        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine(""); formBuilder.AppendLine(""); formBuilder.AppendLine(""); formBuilder.AppendLine(""); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); result = formBuilder.ToString(); } catch (Exception ex) { exception.HandleException("handler:", MethodBase.GetCurrentMethod().Name, ex, HttpContext.Current.Session["user"]); } return result; } /// /// Build Controls in Groups /// /// /// private static string BuildSurfaceGroupControls(ArrayList GroupList, oSurface _surface, string tabName, bool isSubGroup = false) { string result = String.Empty; StringBuilder formBuilder = new StringBuilder(); string validationGroup = "surface"; try { //seperate validation groups by tabname if (_surface.isWizzard) validationGroup = tabName; foreach (oSurfaceField group in GroupList) { if (group.surfaceFieldSize > 0 && group.isGroupSized) { formBuilder.AppendLine("
        "); } formBuilder.AppendLine("
        "); //start of group formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); //heading formBuilder.AppendLine("
        "); if (!isSubGroup) { if (group.isControlled) formBuilder.AppendLine(""); else formBuilder.AppendLine(""); } formBuilder.AppendLine(group.controlText != "" ? group.controlText : group.surfaceFieldDisplay); //formBuilder.AppendLine(""); //formBuilder.AppendLine(""); //formBuilder.AppendLine(""); //delete formBuilder.AppendLine(""); formBuilder.AppendLine(""); formBuilder.AppendLine(""); //edit formBuilder.AppendLine(""); formBuilder.AppendLine(""); formBuilder.AppendLine(""); //add formBuilder.AppendLine(""); formBuilder.AppendLine(""); formBuilder.AppendLine(""); //move formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); //end of heading //toggle panel //CVH 2016-12-12 Set class if collapsed by default if (group.isControlled) formBuilder.AppendLine("
        "); else formBuilder.AppendLine("
        "); //build body of formBuilder.AppendLine("
        "); //build horizontal form formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); //row formBuilder.AppendLine("
        "); //fetch controls for this group ArrayList fieldControls = xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceField), "surfaceId,isActive,parentId", _surface.recId + ",1," + group.recId, "sequence"); int counter = 0; int fieldSize = 6; int labelSize = 4; int valueSize = 8; string borderClass = ""; string capitalize = ""; if (_surface.isCapitalizeInput) capitalize = " onchange=\"capitalize(this)\" "; foreach (oSurfaceField ctrl in fieldControls) { fieldSize = ctrl.surfaceFieldSize == 0 ? 6 : ctrl.surfaceFieldSize; labelSize = ctrl.labelSize == 0 ? 4 : ctrl.labelSize; if (labelSize < 12) valueSize = 12 - labelSize; else valueSize = 12; borderClass = ""; if (ctrl.hasFullBorder) borderClass = borderClass + " surfaceFieldBorder"; if (ctrl.hasBottomBorder) borderClass = borderClass + " surfaceFieldBorderBottom"; /* CVH - 2016-01-20 */ if (ctrl.isHidden) { //JasR 2016-01-28 add hidden field with ccs noshow - that way it's still accessable in the code behind. pNums.FieldType typ = (pNums.FieldType)Enum.ToObject(typeof(pNums.FieldType), ctrl.surfaceFieldTypeId); switch (typ) { #region Text /* CVH 2016-01-29 Add MaxLength property to textboxes. When 0, unlimited */ case pNums.FieldType.Text: formBuilder.AppendLine(""); break; #endregion #region Number case pNums.FieldType.Number: formBuilder.AppendLine(""); break; #endregion #region Decimal case pNums.FieldType.Decimal: formBuilder.AppendLine(""); break; #endregion #region Picklist case pNums.FieldType.Picklist: ArrayList lookupList = xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceLookup), "categoryId", ctrl.lookupCategory.ToString(), "display"); formBuilder.AppendLine(""); if (!ctrl.isCustomSource) { formBuilder.AppendLine("select.."); foreach (oSurfaceLookup look in lookupList) { formBuilder.AppendLine("" + look.display + ""); } } formBuilder.AppendLine(""); break; #endregion #region Date case pNums.FieldType.Date: //formBuilder.AppendLine(""); //CVH 2017-07-18 Remove data-provide=\"datepicker-inline\" - causes double calendar formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); break; #endregion #region Time case pNums.FieldType.Time: formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); break; #endregion #region Checkbox case pNums.FieldType.Checkbox: formBuilder.AppendLine(""); break; #endregion #region Grid case pNums.FieldType.Grid: //no control break; #endregion #region Content case pNums.FieldType.Content: formBuilder.AppendLine(""); break; #endregion #region RadioButtonList case pNums.FieldType.RadioButtonList: if (ctrl.isCustomSource) { formBuilder.AppendLine(""); formBuilder.AppendLine(""); } else { ArrayList radioLookupList = xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceLookup), "categoryId", ctrl.lookupCategory.ToString(), "display"); if (ctrl.alternateView) { formBuilder.AppendLine("
        "); foreach (oSurfaceLookup look in radioLookupList) { formBuilder.AppendLine(""); } formBuilder.AppendLine("
        "); } else { formBuilder.AppendLine(""); foreach (oSurfaceLookup look in radioLookupList) { formBuilder.AppendLine("" + look.display + ""); } formBuilder.AppendLine(""); } } break; #endregion #region Button case pNums.FieldType.Button: formBuilder.AppendLine(""); break; #endregion #region RelationalField case pNums.FieldType.RelationalField: formBuilder.AppendLine(""); break; #endregion #region Placeholder case pNums.FieldType.Placeholder: formBuilder.AppendLine(""); break; #endregion #region Attachment case pNums.FieldType.Attachment: formBuilder.AppendLine(""); break; #endregion #region Note case pNums.FieldType.Note: formBuilder.AppendLine(""); break; #endregion #region Caption case pNums.FieldType.Caption: formBuilder.AppendLine(""); //formBuilder.AppendLine(""); break; #endregion #region Debtors case pNums.FieldType.Debtors: formBuilder.AppendLine(""); break; #endregion #region FormulaField //JR Bas-Pro-4 case pNums.FieldType.FormulaField: formBuilder.AppendLine(""); break; #endregion #region CheckboxList case pNums.FieldType.CheckboxList: ArrayList checkLookupList = xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceLookup), "categoryId", ctrl.lookupCategory.ToString(), "display"); //formBuilder.AppendLine(""); //foreach (oSurfaceLookup look in checkLookupList) //{ // formBuilder.AppendLine("" + look.display + ""); //} //formBuilder.AppendLine(""); /* CVH 2016-09-27 Cater for Wants Reason. Keep alternateView a checkboxlist, reason not handled */ if (ctrl.alternateView) { //first get longest value to define sizes int maxLength = 0; foreach (oSurfaceLookup look in checkLookupList) { if (look.display.Length > maxLength) maxLength = look.display.Length; } string sizer = "col-md-4"; if (maxLength > 15) sizer = "col-md-8"; if (maxLength > 10) sizer = "col-md-6"; if (maxLength < 5) sizer = "col-md-2"; formBuilder.AppendLine(""); foreach (oSurfaceLookup look in checkLookupList) { formBuilder.AppendLine(""); } formBuilder.AppendLine(""); } else { formBuilder.AppendLine(""); foreach (oSurfaceLookup look in checkLookupList) { if (look.wantsReason) formBuilder.AppendLine("
        "); else formBuilder.AppendLine("
        "); } formBuilder.AppendLine("
        "); } break; #endregion #region MultiPicklist case pNums.FieldType.MultiPicklist: ArrayList multiLookupList = xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceLookup), "categoryId", ctrl.lookupCategory.ToString(), "display"); formBuilder.AppendLine(""); foreach (oSurfaceLookup look in multiLookupList) { formBuilder.AppendLine("" + look.display + ""); } formBuilder.AppendLine(""); break; #endregion #region Sales case pNums.FieldType.Sales: //formBuilder.AppendLine(""); break; #endregion #region Image case pNums.FieldType.Image: formBuilder.AppendLine(" "); break; #endregion #region Control case pNums.FieldType.Control: string controlType = string.Empty; string controlPath = string.Empty; string controlName = string.Empty; foreach (oModule module in xData.GetTypedByCriteriaSpecific("recId", typeof(oModule), "recId", ctrl.controlledValue)) { controlType = module.module; controlPath = module.control; controlName = module.objectName; } //formBuilder.AppendLine(GetUserControl(_surface, controlType, controlPath, controlName)); add nothing when hidden break; #endregion #region BarcodeScanner case pNums.FieldType.BarcodeScanner: formBuilder.AppendLine(""); break; #endregion } continue; } if (ctrl.surfaceFieldTypeId != pNums.FieldType.Tab.GetHashCode() && ctrl.surfaceFieldTypeId != pNums.FieldType.Group.GetHashCode()) { counter++; //if (counter == 3) //{ // counter = 1; // formBuilder.AppendLine("
        "); // formBuilder.AppendLine("
        "); //} string strTextboxPostbackEvent = ctrl.isAutoPostback ? " AutoPostback=\"true\" OnTextChanged=\"surfaceTextBox_TextChanged\"" : " "; //CVH 2016-10-11 When field has Toggle View action, need to set visible=false to entire group string toggleViewStart = ""; string toggleViewEnd = ""; if (ctrl.actionType == pNums.ActionType.ToggleView.GetHashCode()) { toggleViewStart = "
        "; toggleViewEnd = "
        "; } //build control based on type //set new line if (ctrl.isOnNewLine) formBuilder.AppendLine("
        "); string displayText = ctrl.controlText != "" ? ctrl.controlText : ctrl.surfaceFieldDisplay; pNums.FieldType typ = (pNums.FieldType)Enum.ToObject(typeof(pNums.FieldType), ctrl.surfaceFieldTypeId); switch (typ) { /* CVH 2016-01-29 Add MaxLength property to TextBoxes. When 0, unlimited */ #region Text case pNums.FieldType.Text: string onChangeEvent = capitalize; //GR 2017-07-19 Changed to use regulare expression validation below //if (ctrl.validationType != 0) //{ // foreach (oSurfaceFieldValidationType validationType in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceFieldValidationType), "recId", ctrl.validationType.ToString())) // { // switch (validationType.validationType.ToLower()) // { // case "email": // onChangeEvent = " onchange=\"checkEmail(this)\" "; // break; // case "id number": // onChangeEvent = " onkeypress=\"return isNumberKey(event)\" onchange=\"checkIdNumber(this)\" "; // break; // case "mobile number": // onChangeEvent = " onkeypress=\"return isNumberKey(event)\" onchange=\"checkMobileNumber(this)\" "; // break; // default: // break; // } // } //} //CVH 2016-10-11 Action ToggleView formBuilder.AppendLine(toggleViewStart); //5 col div formBuilder.AppendLine("
        "); //form group formBuilder.AppendLine("
        "); //label if (ctrl.isLabelHidden) { formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); } else { formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine(SetActionButton(ctrl)); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); } break; #endregion #region Number case pNums.FieldType.Number: //CVH 2016-10-11 Action ToggleView formBuilder.AppendLine(toggleViewStart); //5 col div formBuilder.AppendLine("
        "); //form group formBuilder.AppendLine("
        "); //label if (!ctrl.isLabelHidden) { formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine(SetActionButton(ctrl)); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); } else { formBuilder.AppendLine("
        "); } formBuilder.AppendLine(""); break; #endregion #region Decimal case pNums.FieldType.Decimal: //CVH 2016-10-11 Action ToggleView formBuilder.AppendLine(toggleViewStart); //5 col div formBuilder.AppendLine("
        "); //form group formBuilder.AppendLine("
        "); //label if (!ctrl.isLabelHidden) { formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine(SetActionButton(ctrl)); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); } else { formBuilder.AppendLine("
        "); } if (ctrl.isCurrency) { formBuilder.AppendLine("
        "); string currencySymbol = "R"; formBuilder.AppendLine("" + currencySymbol + ""); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); } else { formBuilder.AppendLine(""); } break; #endregion #region Picklist case pNums.FieldType.Picklist: string select2Class = ctrl.isSearchable ? "select2 " : ""; string strPicklistPostbackEvent = ctrl.isAutoPostback ? " AutoPostback=\"true\" OnSelectedIndexChanged=\"surfaceDropDownList_SelectedIndexChanged\"" : " "; //CVH 2016-10-11 Action ToggleView formBuilder.AppendLine(toggleViewStart); //5 col div formBuilder.AppendLine("
        "); //form group formBuilder.AppendLine("
        "); //label if (!ctrl.isLabelHidden) { formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); } else { formBuilder.AppendLine("
        "); } ArrayList lookupList = xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceLookup), "categoryId", ctrl.lookupCategory.ToString(), "sequence"); if (!ctrl.isCustomSource) { //CVH 2017-02-22 Dropdownlist wants reason without postback StringBuilder ddlItems = new StringBuilder(); string ddlReasonValues = String.Empty; foreach (oSurfaceLookup lookup in lookupList) { ddlItems.AppendLine("" + lookup.display + ""); if (lookup.wantsReason) ddlReasonValues += " " + lookup.recId; } string ddlClientClick = ""; if (ddlReasonValues != String.Empty) { ddlClientClick = " onchange=\"PicklistEnableReason('" + ctrl.surfaceFieldName + "');\" "; formBuilder.AppendLine("
        "); } formBuilder.AppendLine(""); formBuilder.AppendLine("select.."); formBuilder.AppendLine(ddlItems.ToString()); formBuilder.AppendLine(""); if (ddlReasonValues != String.Empty) formBuilder.AppendLine("
        "); } else { formBuilder.AppendLine(""); formBuilder.AppendLine(""); } /* if (ddlReasonValues != String.Empty) { formBuilder.AppendLine("
        "); formBuilder.AppendLine("select.."); foreach (oSurfaceLookup look in lookupList) { formBuilder.AppendLine("" + look.display + ""); } formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); } else { formBuilder.AppendLine(""); formBuilder.AppendLine("select.."); foreach (oSurfaceLookup look in lookupList) { formBuilder.AppendLine("" + look.display + ""); } formBuilder.AppendLine(""); } */ break; #endregion #region Date case pNums.FieldType.Date: //CVH 2017-06-09 Cater for date format yyyy/MM/dd //CVH 2016-10-11 Action ToggleView formBuilder.AppendLine(toggleViewStart); //5 col div formBuilder.AppendLine("
        "); //form group formBuilder.AppendLine("
        "); //label if (!ctrl.isLabelHidden) { formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine(SetActionButton(ctrl)); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); } else { formBuilder.AppendLine("
        "); } //CVH 2017-03-01 Cater for Year date type if (ctrl.surfaceDateTypeId == pNums.SurfaceDateType.Year.GetHashCode()) { formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); } //CVH 2016-10-06 Cater for Month/Year date type else if (ctrl.surfaceDateTypeId == pNums.SurfaceDateType.MonthYear.GetHashCode()) { formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); } else { //CVH 2017-07-18 Remove data-provide=\"datepicker-inline\" - causes double calendar formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); //default dd/MM/yyyy string regularExp = "^(((((0[1-9])|(1\\d)|(2[0-8]))\\/((0[1-9])|(1[0-2])))|((31\\/((0[13578])|(1[02])))|((29|30)\\/((0[1,3-9])|(1[0-2])))))\\/((20[0-9][0-9])|(19[0-9][0-9])))|((29\\/02\\/(19|20)(([02468][048])|([13579][26]))))$"; if (utils.displayDateFormat() == "yyyy/MM/dd") regularExp = "^(((20[0-9][0-9])|(19[0-9][0-9]))\\/((((0[1-9])|(1[0-2]))\\/((0[1-9])|(1\\d)|(2[0-8])))|((((0[13578])|(1[02]))\\/31)|(((0[1,3-9])|(1[0-2]))\\/(29|30)))))|(((19|20)(([02468][048])|([13579][26]))\\/02\\/29))$"; formBuilder.AppendLine(""); } break; #endregion #region Time case pNums.FieldType.Time: formBuilder.AppendLine(toggleViewStart); //5 col div formBuilder.AppendLine("
        "); //form group formBuilder.AppendLine("
        "); //label if (!ctrl.isLabelHidden) { formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine(SetActionButton(ctrl)); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); } else { formBuilder.AppendLine("
        "); } formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); //not working on server //string regularTime = "^(([0-1][0-9])|(2[0-3])):[0-5][0-9]$"; //formBuilder.AppendLine(""); break; #endregion #region Checkbox case pNums.FieldType.Checkbox: string strCheckboxPostbackEvent = ctrl.isAutoPostback ? " AutoPostback=\"true\" OnCheckedChanged=\"surfaceCheckbox_OnCheckedChanged\" " : " "; //CVH 2016-10-11 Action ToggleView formBuilder.AppendLine(toggleViewStart); //5 col div formBuilder.AppendLine("
        "); //form group formBuilder.AppendLine("
        "); //label if (!ctrl.isLabelHidden) { formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); } else { formBuilder.AppendLine("
        "); } formBuilder.AppendLine(""); break; #endregion #region Grid case pNums.FieldType.Grid: //CVH 2016-10-11 Action ToggleView formBuilder.AppendLine(toggleViewStart); //5 col div formBuilder.AppendLine("
        "); //form group formBuilder.AppendLine("
        "); //no label if (!ctrl.isLabelHidden) { formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); } else { //span 12 columns, not 8 /* CVH 2016-01-25 Add ID tag to be able to FindControl */ formBuilder.AppendLine("
        "); } foreach (oSurface gridSurface in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurface), "name", ctrl.relationalSurface)) { if (!File.Exists(HttpContext.Current.Server.MapPath("~/controls/surface/" + gridSurface.name + ".ascx"))) { surfaceHandler.BuildSurfaceAppTemplate(gridSurface, "~/controls/surface/surface.ascx", "~/controls/surface/", true); } if (ctrl.isComparable) formBuilder.AppendLine(BuildSurfaceCompare(gridSurface, true, ctrl.surfaceFieldName, ctrl.surfaceId)); if (ctrl.relationalValues == "1") { //CVH 2017-01-09 Build validation summary per tab, but don't replace anything, there is no validation summary for the grid form here string valSummaryTabs = ""; formBuilder.AppendLine(BuildSurfaceForm(gridSurface, true, ref valSummaryTabs, true, ctrl.surfaceFieldName, ctrl.surfaceId)); } else formBuilder.AppendLine(BuildSurfaceGrid(gridSurface, true, false, validationGroup, ctrl.surfaceFieldName, ctrl.surfaceId, ctrl.isComparable, length: ctrl.length)); break; } //formBuilder.AppendLine(""); break; #endregion #region Content case pNums.FieldType.Content: //CVH 2016-10-11 Action ToggleView formBuilder.AppendLine(toggleViewStart); //5 col div formBuilder.AppendLine("
        "); //form group formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); break; #endregion #region RadioButtonList /* JasR 2016-01-07 Add RadioButtonList option */ case pNums.FieldType.RadioButtonList: string strRadioPostbackEvent = ctrl.isAutoPostback ? " AutoPostback=\"true\" OnSelectedIndexChanged=\"surfaceRadioButtonList_SelectedIndexChanged\"" : " "; //CVH 2016-10-11 Action ToggleView formBuilder.AppendLine(toggleViewStart); //5 col div formBuilder.AppendLine("
        "); //form group formBuilder.AppendLine("
        "); //label if (!ctrl.isLabelHidden) { formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); } else { formBuilder.AppendLine("
        "); } if (ctrl.isCustomSource) { //CVH 2017-10-27 Removing pretty radio functionality, it doesn't work on mobile - to make it big add, class to core.css (refer to TSP) //formBuilder.AppendLine(""); formBuilder.AppendLine(""); formBuilder.AppendLine(""); } else { ArrayList radioLookupList = xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceLookup), "categoryId", ctrl.lookupCategory.ToString(), "sequence"); if (ctrl.alternateView) { //first get longest value to define sizes int maxLength = 0; foreach (oSurfaceLookup look in radioLookupList) { if (look.display.Length > maxLength) maxLength = look.display.Length; } string sizer = "col-md-4"; if (maxLength < 3) sizer = "col-md-2"; else if (maxLength < 6) sizer = "col-md-3"; else if (maxLength < 10) sizer = "col-md-4"; else if (maxLength < 15) sizer = "col-md-6"; else sizer = "col-md-8"; //CVH 2016-11-09 Remove data-toggle="buttons" to enable event to fire. Class added to items to remove radio bullet if (strRadioPostbackEvent.Trim() == String.Empty) { formBuilder.AppendLine(""); foreach (oSurfaceLookup look in radioLookupList) { formBuilder.AppendLine(""); } } else { formBuilder.AppendLine(""); foreach (oSurfaceLookup look in radioLookupList) { formBuilder.AppendLine(""); } } formBuilder.AppendLine(""); } else { StringBuilder rblItems = new StringBuilder(); string reasonValues = ""; foreach (oSurfaceLookup look in radioLookupList) { rblItems.AppendLine("" + look.display + ""); if (look.wantsReason) reasonValues += " " + look.recId; } string rblClientClick = ""; if (reasonValues != String.Empty) rblClientClick = " onclick=\"RadioButtonListEnableReason('" + ctrl.surfaceFieldName + "');\" "; //CVH 2017-10-27 Removing pretty radio functionality, it doesn't work on mobile - to make it big add, class to core.css (refer to TSP) //formBuilder.AppendLine(""); formBuilder.AppendLine(""); formBuilder.AppendLine(rblItems.ToString()); formBuilder.AppendLine(""); } formBuilder.AppendLine(""); } break; #endregion #region Button /* JasR 2016-01-16 Add Button option */ case pNums.FieldType.Button: //CVH 2016-10-11 Action ToggleView formBuilder.AppendLine(toggleViewStart); //5 col div formBuilder.AppendLine("
        "); //form group formBuilder.AppendLine("
        "); if (!ctrl.isLabelHidden) { formBuilder.AppendLine("");//label as placeholder formBuilder.AppendLine("
        "); } else { formBuilder.AppendLine("
        "); } formBuilder.AppendLine(""); break; #endregion #region RelationalField case pNums.FieldType.RelationalField: //CVH 2016-10-11 Action ToggleView formBuilder.AppendLine(toggleViewStart); //5 col div formBuilder.AppendLine("
        "); //form group formBuilder.AppendLine("
        "); //label if (!ctrl.isLabelHidden) { formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); } else { formBuilder.AppendLine("
        "); } foreach (oSurfaceField relatedField in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceField), "recId", ctrl.relationalFields.ToString())) { if (relatedField.surfaceFieldTypeId == pNums.FieldType.Control.GetHashCode()) { string relationalControlType = string.Empty; string relationalControlPath = string.Empty; string relationalControlName = string.Empty; foreach (oModule module in xData.GetTypedByCriteriaSpecific("recId", typeof(oModule), "recId", relatedField.controlledValue)) { relationalControlType = module.module; relationalControlPath = module.control; relationalControlName = module.objectName; } formBuilder.AppendLine(GetUserControl(_surface, relationalControlType, relationalControlPath, relationalControlName, false, ctrl.surfaceFieldName)); } else { formBuilder.AppendLine(""); } } break; #endregion #region Placeholder case pNums.FieldType.Placeholder: //CVH 2016-10-11 Action ToggleView formBuilder.AppendLine(toggleViewStart); //5 col div formBuilder.AppendLine("
        "); ; //form group formBuilder.AppendLine("
        "); //no label //span 12 columns, not 8 formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); break; #endregion #region Attachment case pNums.FieldType.Attachment: //CVH 2016-10-11 Action ToggleView formBuilder.AppendLine(toggleViewStart); //5 col div formBuilder.AppendLine("
        "); //form group formBuilder.AppendLine("
        "); if (!ctrl.isLabelHidden) { formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); } else { formBuilder.AppendLine("
        "); } var valicationAttr = ""; if (ctrl.required) valicationAttr = "ValidationGroup=\"" + validationGroup + "\" "; formBuilder.AppendLine(""); break; #endregion #region Note case pNums.FieldType.Note: //CVH 2016-10-11 Action ToggleView formBuilder.AppendLine(toggleViewStart); //5 col div formBuilder.AppendLine("
        "); //form group formBuilder.AppendLine("
        "); if (!ctrl.isLabelHidden) { formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); } else { formBuilder.AppendLine("
        "); } formBuilder.AppendLine(""); break; #endregion #region Caption //JasR 2016-01-27 Caption case pNums.FieldType.Caption: //CVH 2016-10-11 Action ToggleView formBuilder.AppendLine(toggleViewStart); //5 col div formBuilder.AppendLine("
        "); //form group formBuilder.AppendLine("
        "); //label if (!ctrl.isLabelHidden) { formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine(SetActionButton(ctrl)); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); } else { formBuilder.AppendLine("
        "); } formBuilder.AppendLine(""); //formBuilder.AppendLine(""); break; #endregion #region Debtors case pNums.FieldType.Debtors: //CVH 2016-10-11 Action ToggleView formBuilder.AppendLine(toggleViewStart); //5 col div formBuilder.AppendLine("
        "); //form group formBuilder.AppendLine("
        "); if (!ctrl.isLabelHidden) { formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); } else { formBuilder.AppendLine("
        "); } formBuilder.AppendLine(""); break; #endregion #region Mediswitch case pNums.FieldType.Mediswitch: //CVH 2016-10-11 Action ToggleView formBuilder.AppendLine(toggleViewStart); //5 col div formBuilder.AppendLine("
        "); //form group formBuilder.AppendLine("
        "); if (!ctrl.isLabelHidden) { formBuilder.AppendLine("");//label as placeholder formBuilder.AppendLine("
        "); } else { formBuilder.AppendLine("
        "); } formBuilder.AppendLine(""); break; #endregion #region FormulaField case pNums.FieldType.FormulaField: //CVH 2016-10-11 Action ToggleView formBuilder.AppendLine(toggleViewStart); //5 col div formBuilder.AppendLine("
        "); //form group formBuilder.AppendLine("
        "); //label if (!ctrl.isLabelHidden) { formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); } else { formBuilder.AppendLine("
        "); } formBuilder.AppendLine(""); break; #endregion #region Address case pNums.FieldType.Address: //CVH 2016-10-11 Action ToggleView formBuilder.AppendLine(toggleViewStart); //5 col div formBuilder.AppendLine("
        "); //form group formBuilder.AppendLine("
        "); //label if (!ctrl.isLabelHidden) { formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine(SetActionButton(ctrl)); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); } else { formBuilder.AppendLine("
        "); } formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); if (handler.ReturnSetup().code == "STUD-1" || handler.ReturnSetup().code == "DISA-1") { formBuilder.AppendLine(""); } else { formBuilder.AppendLine(""); } formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); /* CVH 2016-08-15 Don't display Country field */ formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); break; #endregion #region CheckboxList case pNums.FieldType.CheckboxList: //CVH 2016-10-27 Action ToggleView formBuilder.AppendLine(toggleViewStart); //5 col div formBuilder.AppendLine("
        "); //form group formBuilder.AppendLine("
        "); //label if (!ctrl.isLabelHidden) { formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); } else { formBuilder.AppendLine("
        "); } ArrayList checkLookupList = xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceLookup), "categoryId", ctrl.lookupCategory.ToString(), "sequence"); if (ctrl.alternateView) { string strCheckboxListPostbackEvent = ctrl.isAutoPostback ? " AutoPostback=\"true\" OnSelectedIndexChanged=\"surfaceCheckboxList_OnCheckedChanged\" " : " "; /* CVH 2016-09-27 Wants Reason not catered for checkboxlists in alternate view */ //first get longest value to define sizes int maxLength = 0; foreach (oSurfaceLookup look in checkLookupList) { if (look.display.Length > maxLength) maxLength = look.display.Length; } string sizer = "col-md-4"; if (maxLength < 3) sizer = "col-md-2"; else if (maxLength < 6) sizer = "col-md-3"; else if (maxLength < 10) sizer = "col-md-4"; else if (maxLength < 15) sizer = "col-md-6"; else sizer = "col-md-8"; //CVH 2017-07-13 Remove data-toggle="buttons" to enable event to fire. Class added to items to remove checkbox if (!ctrl.isAutoPostback) { formBuilder.AppendLine(""); foreach (oSurfaceLookup look in checkLookupList) { formBuilder.AppendLine(""); } } else { formBuilder.AppendLine(""); foreach (oSurfaceLookup look in checkLookupList) { formBuilder.AppendLine(""); } } formBuilder.AppendLine(""); } else { string strCheckboxListPostbackEvent = ctrl.isAutoPostback ? " AutoPostback=\"true\" OnCheckedChanged=\"surfaceCheckboxList_OnCheckedChanged\" " : " "; /* CVH 2016-09-27 Add reason textbox if picklist item wants reason */ //CVH 2017-03-15 Remove fancy checkboxes //formBuilder.AppendLine(""); //foreach (oSurfaceLookup look in checkLookupList) //{ // formBuilder.AppendLine("" + look.display + ""); //} //formBuilder.AppendLine(""); formBuilder.AppendLine(""); foreach (oSurfaceLookup look in checkLookupList) { //add client click event to enable/disable reason textbox if (look.wantsReason) { formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); } else { formBuilder.AppendLine("
        "); } } formBuilder.AppendLine("
        "); } break; #endregion #region MultiPicklist case pNums.FieldType.MultiPicklist: //CVH 2016-10-11 Action ToggleView formBuilder.AppendLine(toggleViewStart); //5 col div formBuilder.AppendLine("
        "); //form group formBuilder.AppendLine("
        "); //label if (!ctrl.isLabelHidden) { formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); } else { formBuilder.AppendLine("
        "); } ArrayList multiLookupList = xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceLookup), "categoryId", ctrl.lookupCategory.ToString(), "display"); formBuilder.AppendLine(""); foreach (oSurfaceLookup look in multiLookupList) { formBuilder.AppendLine("" + look.display + ""); } formBuilder.AppendLine(""); break; #endregion #region Sales case pNums.FieldType.Sales: //formBuilder.AppendLine("
        "); //formBuilder.AppendLine("
        "); //formBuilder.AppendLine(""); //formBuilder.AppendLine("
        "); //formBuilder.AppendLine(""); break; #endregion #region Image case pNums.FieldType.Image: //CVH 2016-10-11 Action ToggleView formBuilder.AppendLine(toggleViewStart); //5 col div formBuilder.AppendLine("
        "); //form group formBuilder.AppendLine("
        "); //label if (!ctrl.isLabelHidden) { formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine(SetActionButton(ctrl)); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); } else { formBuilder.AppendLine("
        "); } formBuilder.AppendLine("
        "); //formBuilder.AppendLine(""); //formBuilder.AppendLine("
        "); formBuilder.AppendLine(" "); //formBuilder.AppendLine(" "); break; #endregion #region Control case pNums.FieldType.Control: //CVH 2016-10-11 Action ToggleView formBuilder.AppendLine(toggleViewStart); string controlType = string.Empty; string controlPath = string.Empty; string controlName = string.Empty; foreach (oModule module in xData.GetTypedByCriteriaSpecific("recId", typeof(oModule), "recId", ctrl.controlledValue)) { controlType = module.module; controlPath = module.control; controlName = module.objectName; } //5 col div formBuilder.AppendLine("
        "); //form group formBuilder.AppendLine("
        "); if (!ctrl.isLabelHidden) { formBuilder.AppendLine(""); } formBuilder.AppendLine("
        "); //control formBuilder.AppendLine(GetUserControl(_surface, controlType, controlPath, controlName, false, ctrl.surfaceFieldName, group.surfaceFieldName)); //formBuilder.AppendLine("
        "); break; #endregion #region Label case pNums.FieldType.Label: formBuilder.AppendLine(toggleViewStart); //5 col div formBuilder.AppendLine("
        "); //form group formBuilder.AppendLine("
        "); //label if (!ctrl.isLabelHidden) { formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); } else { formBuilder.AppendLine("
        "); } string valueString = ""; if (ctrl.relationalSurface.ToString() != "date" && ctrl.relationalSurface.ToString() != "user" && ctrl.relationalSurface.ToString() != "static") { foreach (oSurfaceField sourceField in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceField), "surfaceId,recId", ctrl.relationalSurface.ToString() + "," + ctrl.relationalFields.ToString())) { pNums.FieldType sourceType = (pNums.FieldType)Enum.ToObject(typeof(pNums.FieldType), sourceField.surfaceFieldTypeId); switch (sourceType) { case pNums.FieldType.Image: valueString = "
        "; break; case pNums.FieldType.Attachment: valueString = "
        "; break; case pNums.FieldType.Note: valueString = "
        "; break; default: //label valueString = ""; break; } } } if (valueString == "") valueString = ""; formBuilder.AppendLine(valueString); break; #endregion #region ChildGridFilter case pNums.FieldType.ChildGridFilter: formBuilder.AppendLine(toggleViewStart); //5 col div formBuilder.AppendLine("
        "); //form group formBuilder.AppendLine("
        "); var filtrationInfo = FiltrationInfo.Deserialize(ctrl.relationalFields); formBuilder.AppendLine("
        "); formBuilder.AppendLine("

        "); formBuilder.AppendLine($""); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine($""); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); foreach (var searchFieldId in filtrationInfo.FilterFieldIds) { formBuilder.AppendLine("
        "); var searchField = xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceField), "recId", searchFieldId.ToString()).OfType().FirstOrDefault(); if (searchField != null) { formBuilder.AppendLine($"
        {searchField.surfaceFieldDisplay}
        "); formBuilder.AppendLine($""); } formBuilder.AppendLine("
        "); } formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        Search All Items
        "); formBuilder.AppendLine($""); formBuilder.AppendLine("
        "); formBuilder.AppendLine($" "); formBuilder.AppendLine($""); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); break; #endregion #region BarcodeScanner case pNums.FieldType.BarcodeScanner: formBuilder.AppendLine(toggleViewStart); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); if (ctrl.isLabelHidden) { formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine(""); } else { formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine(SetActionButton(ctrl)); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine(""); } break; #endregion } formBuilder.AppendLine(""); formBuilder.AppendLine(""); //delete formBuilder.AppendLine(""); formBuilder.AppendLine(""); formBuilder.AppendLine(""); //edit formBuilder.AppendLine(""); formBuilder.AppendLine(""); formBuilder.AppendLine(""); formBuilder.AppendLine(""); if (ctrl.required && !_surface.isDisableRequired) { if (ctrl.surfaceFieldTypeId == pNums.FieldType.Picklist.GetHashCode()) { formBuilder.AppendLine(""); } else if (ctrl.surfaceFieldTypeId == pNums.FieldType.RadioButtonList.GetHashCode()) { formBuilder.AppendLine(""); } else if (ctrl.surfaceFieldTypeId == pNums.FieldType.Checkbox.GetHashCode())//need to redo this - it does not work at all { formBuilder.AppendLine(""); } else if (ctrl.surfaceFieldTypeId == pNums.FieldType.CheckboxList.GetHashCode()) { formBuilder.AppendLine(""); } else if (ctrl.surfaceFieldTypeId == pNums.FieldType.MultiPicklist.GetHashCode()) { formBuilder.AppendLine(""); } else if (ctrl.surfaceFieldTypeId == pNums.FieldType.Address.GetHashCode()) { /* CVH 2016-07-28 4 textboxes for address field, just check value exists on first, otherwise get runtime error */ formBuilder.AppendLine(""); } else { formBuilder.AppendLine(""); } } //GR 2017-07-19 build regular expression validators if (ctrl.validationType != 0 && ctrl.surfaceFieldTypeId == pNums.FieldType.Text.GetHashCode()) { string regExpression = String.Empty; pNums.ValidationType valtyp = (pNums.ValidationType)Enum.ToObject(typeof(pNums.ValidationType), ctrl.validationType); switch (valtyp) { case pNums.ValidationType.Email: regExpression = "\\w+([-+.']\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*"; break; case pNums.ValidationType.IdNumber: regExpression = "(((\\d{2}((0[13578]|1[02])(0[1-9]|[12]\\d|3[01])|(0[13456789]|1[012])(0[1-9]|[12]\\d|30)|02(0[1-9]|1\\d|2[0-8])))|([02468][048]|[13579][26])0229))(( |-)(\\d{4})( |-)(\\d{3})|(\\d{7}))"; break; case pNums.ValidationType.ContactNumber: regExpression = "^((?:\\+27|27)|0)(\\d{2})-?(\\d{3})-?(\\d{4})$"; break; default: break; } formBuilder.AppendLine(""); } formBuilder.AppendLine("
        "); //end of control formBuilder.AppendLine("
        "); //end form group //Add Attachments and notes lists if (ctrl.surfaceFieldTypeId == pNums.FieldType.Attachment.GetHashCode()) { formBuilder.AppendLine("
        "); } else if (ctrl.surfaceFieldTypeId == pNums.FieldType.Note.GetHashCode()) { formBuilder.AppendLine("
        "); } formBuilder.AppendLine("
        "); //end of 5 col div //CVH 2016-10-11 Action ToggleView formBuilder.AppendLine(toggleViewEnd); } } 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("
        "); formBuilder.AppendLine(""); //end of group formBuilder.AppendLine("
        "); //end of field size check if (group.surfaceFieldSize > 0 && group.isGroupSized) { formBuilder.AppendLine("
        "); } } result = formBuilder.ToString(); } catch (Exception ex) { exception.HandleException("handler:", MethodBase.GetCurrentMethod().Name, ex, HttpContext.Current.Session["user"]); } return result; } private static string SetActionButton(oSurfaceField ctrl) { string returnString = string.Empty; if (ctrl.actionType == pNums.ActionType.Button.GetHashCode()) { foreach (oSurfaceAction action in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceAction), "recId", ctrl.action.ToString())) { returnString += "
        "; if (action.action == "Copy") { foreach (oSurfaceField sourceField in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceField), "recId", ctrl.actionSource.ToString())) { string btnLabel = "Same as " + sourceField.controlText != "" ? sourceField.controlText : sourceField.surfaceFieldDisplay; if (ctrl.actionValue != "") btnLabel = ctrl.actionValue; returnString += "
        "; } } returnString += "
        "; } } return returnString; } /// /// Build Controls in Groups /// /// /// private static string BuildSurfaceGroupView(ArrayList GroupList, oSurface _surface, bool isChild = false, bool isSubGroup = false) { string result = String.Empty; string prefix = ""; StringBuilder formBuilder = new StringBuilder(); try { if (isChild) prefix = _surface.recId.ToString(); foreach (oSurfaceField group in GroupList) { //start of group formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); //heading formBuilder.AppendLine("
        "); if (!isSubGroup) { if (group.isControlled) formBuilder.AppendLine(""); else formBuilder.AppendLine(""); } formBuilder.AppendLine(group.controlText != "" ? group.controlText : group.surfaceFieldDisplay); //formBuilder.AppendLine(""); //formBuilder.AppendLine(""); //formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); //end of heading //toggle panel //CVH 2016-12-12 Set class if collapsed by default if (group.isControlled) formBuilder.AppendLine("
        "); else formBuilder.AppendLine("
        "); //build body of formBuilder.AppendLine("
        "); //build horizontal form formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); //row formBuilder.AppendLine("
        "); //fetch controls for this group ArrayList fieldControls = xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceField), "surfaceId,isActive,parentId", _surface.recId + ",1," + group.recId, "sequence"); int counter = 0; int fieldSize = 6; int labelSize = 4, valueSize = 8; foreach (oSurfaceField ctrl in fieldControls) { fieldSize = ctrl.surfaceFieldSize == 0 ? 6 : ctrl.surfaceFieldSize; labelSize = ctrl.labelSize == 0 ? 4 : ctrl.labelSize; valueSize = 12 - labelSize; if (ctrl.surfaceFieldTypeId != pNums.FieldType.Tab.GetHashCode() && ctrl.surfaceFieldTypeId != pNums.FieldType.Group.GetHashCode()) { counter++; //if (counter == 3) //{ // counter = 1; // formBuilder.AppendLine("
        "); // formBuilder.AppendLine("
        "); //} //set new line if (ctrl.isOnNewLine) formBuilder.AppendLine("
        "); //build control based on type pNums.FieldType typ = (pNums.FieldType)Enum.ToObject(typeof(pNums.FieldType), ctrl.surfaceFieldTypeId); string displayClass = ctrl.isHidden ? "noShow" : ""; string displayText = ctrl.controlText != "" ? ctrl.controlText : ctrl.surfaceFieldDisplay; switch (typ) { #region Text case pNums.FieldType.Text: //5 col div formBuilder.AppendLine("
        "); //form group formBuilder.AppendLine("
        "); //label if (!ctrl.isLabelHidden) { formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); } else { formBuilder.AppendLine("
        "); } formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); //end of control formBuilder.AppendLine("
        "); //end form group formBuilder.AppendLine("
        "); //end of 5 col div break; #endregion #region Number case pNums.FieldType.Number: //5 col div formBuilder.AppendLine("
        "); //form group formBuilder.AppendLine("
        "); //label if (!ctrl.isLabelHidden) { formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); } else { formBuilder.AppendLine("
        "); } formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); //end of control formBuilder.AppendLine("
        "); //end form group formBuilder.AppendLine("
        "); //end of 5 col div break; #endregion #region Decimal case pNums.FieldType.Decimal: /* * //LABEL decimalCssL = "\"form-control\""; if (stylingTextColourColour != String.Empty && stylingTextColourRule != String.Empty && stylingTextColourRule != "*" && stylingTextColourValue != String.Empty) { decimalCssL = "'<%# \"form-control \" + (Convert.ToDecimal( String.IsNullOrEmpty( DataBinder.Eval(Container, \"DataItem." + field.surfaceFieldName + "\").ToString() ) ? \"0\" : DataBinder.Eval(Container, \"DataItem." + field.surfaceFieldName + "\") ) " + stylingTextColourRule + " " + stylingTextColourValue + " ? \"" + (stylingTextColourColour == "Red" ? "surfaceStylingTextColourRed" : "") + "\": \"\") %>'"; } else if (stylingTextColourColour != String.Empty && stylingTextColourRule == "*") { decimalCssL = "\"form-control " + (stylingTextColourColour == "Red" ? "surfaceStylingTextColourRed" : "") + "\""; } //CVH 2017-03-01 Show same style as textbox string currencySymbol = "R"; fieldBuilder.AppendLine("
        "); fieldBuilder.AppendLine("" + currencySymbol + ""); fieldBuilder.AppendLine(""); fieldBuilder.AppendLine("
        "); */ //5 col div formBuilder.AppendLine("
        "); //form group formBuilder.AppendLine("
        "); //label if (!ctrl.isLabelHidden) { formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); } else { formBuilder.AppendLine("
        "); } if (ctrl.isCurrency) { string currencySymbol = "R"; formBuilder.AppendLine("
        "); formBuilder.AppendLine("" + currencySymbol + ""); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); } else { formBuilder.AppendLine(""); } formBuilder.AppendLine("
        "); //end of control formBuilder.AppendLine("
        "); //end form group formBuilder.AppendLine("
        "); //end of 5 col div break; #endregion #region Picklist case pNums.FieldType.Picklist: //5 col div formBuilder.AppendLine("
        "); //form group formBuilder.AppendLine("
        "); //label if (!ctrl.isLabelHidden) { formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); } else { formBuilder.AppendLine("
        "); } formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); //end of control formBuilder.AppendLine("
        "); //end form group formBuilder.AppendLine("
        "); //end of 5 col div break; #endregion #region Date case pNums.FieldType.Date: //5 col div formBuilder.AppendLine("
        "); //form group formBuilder.AppendLine("
        "); //label if (!ctrl.isLabelHidden) { formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); } else { formBuilder.AppendLine("
        "); } formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); //end of control formBuilder.AppendLine("
        "); //end form group formBuilder.AppendLine("
        "); //end of 5 col div break; #endregion #region Time case pNums.FieldType.Time: //5 col div formBuilder.AppendLine("
        "); //form group formBuilder.AppendLine("
        "); //label if (!ctrl.isLabelHidden) { formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); } else { formBuilder.AppendLine("
        "); } formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); //end of control formBuilder.AppendLine("
        "); //end form group formBuilder.AppendLine("
        "); //end of 5 col div break; #endregion #region Checkbox case pNums.FieldType.Checkbox: //5 col div formBuilder.AppendLine("
        "); //form group formBuilder.AppendLine("
        "); //label if (!ctrl.isLabelHidden) { formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); } else { formBuilder.AppendLine("
        "); } formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); //end of control formBuilder.AppendLine("
        "); //end form group formBuilder.AppendLine("
        "); //end of 5 col div break; #endregion #region RadioButtonList case pNums.FieldType.RadioButtonList: //5 col div formBuilder.AppendLine("
        "); //form group formBuilder.AppendLine("
        "); //label if (!ctrl.isLabelHidden) { formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); } else { formBuilder.AppendLine("
        "); } formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); //end of control formBuilder.AppendLine("
        "); //end form group formBuilder.AppendLine("
        "); //end of 5 col div break; #endregion #region RelationalField case pNums.FieldType.RelationalField: //5 col div formBuilder.AppendLine("
        "); //form group formBuilder.AppendLine("
        "); //label if (!ctrl.isLabelHidden) { formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); } else { formBuilder.AppendLine("
        "); } foreach (oSurfaceField relatedField in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceField), "recId", ctrl.relationalFields.ToString())) { if (relatedField.surfaceFieldTypeId == pNums.FieldType.Control.GetHashCode()) { string relationalControlType = string.Empty; string relationalControlPath = string.Empty; string relationalControlName = string.Empty; foreach (oModule module in xData.GetTypedByCriteriaSpecific("recId", typeof(oModule), "recId", relatedField.controlledValue)) { relationalControlType = module.module; relationalControlPath = module.control; relationalControlName = module.objectName; } formBuilder.AppendLine(GetUserControl(_surface, relationalControlType, relationalControlPath, relationalControlName, true, ctrl.surfaceFieldName)); } else { formBuilder.AppendLine(""); } } formBuilder.AppendLine("
        "); //end of control formBuilder.AppendLine("
        "); //end form group formBuilder.AppendLine("
        "); //end of 5 col div break; #endregion #region Attachment case pNums.FieldType.Attachment: //5 col div formBuilder.AppendLine("
        "); //form group formBuilder.AppendLine("
        "); //label if (!ctrl.isLabelHidden) { formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); } else { formBuilder.AppendLine("
        "); } formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); //end of control formBuilder.AppendLine("
        "); //end form group formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); //end of 5 col div break; #endregion #region Caption case pNums.FieldType.Caption: //5 col div formBuilder.AppendLine("
        "); //form group formBuilder.AppendLine("
        "); //label if (!ctrl.isLabelHidden) { formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); } else { formBuilder.AppendLine("
        "); } formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); //end of control formBuilder.AppendLine("
        "); //end form group formBuilder.AppendLine("
        "); //end of 5 col div break; #endregion #region Note case pNums.FieldType.Note: //5 col div formBuilder.AppendLine("
        "); //form group formBuilder.AppendLine("
        "); //label if (!ctrl.isLabelHidden) { formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); } else { formBuilder.AppendLine("
        "); } formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); //end of control formBuilder.AppendLine("
        "); //end form group formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); //end of 5 col div break; #endregion #region Debtors case pNums.FieldType.Debtors: //5 col div formBuilder.AppendLine("
        "); //form group formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); //end of control formBuilder.AppendLine("
        "); //end form group formBuilder.AppendLine("
        "); //end of 5 col div break; #endregion #region Mediswitch case pNums.FieldType.Mediswitch: //5 col div formBuilder.AppendLine("
        "); //form group formBuilder.AppendLine("
        "); //label if (!ctrl.isLabelHidden) { formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); } else { formBuilder.AppendLine("
        "); } formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); //end of control formBuilder.AppendLine("
        "); //end form group formBuilder.AppendLine("
        "); //end of 5 col div break; #endregion #region Content case pNums.FieldType.Content: //5 col div formBuilder.AppendLine("
        "); //form group formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); //end of control formBuilder.AppendLine("
        "); //end form group formBuilder.AppendLine("
        "); //end of 5 col div break; #endregion #region CheckboxList //formBuilder.AppendLine(""); case pNums.FieldType.CheckboxList: //5 col div formBuilder.AppendLine("
        "); //form group formBuilder.AppendLine("
        "); //label if (!ctrl.isLabelHidden) { formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); } else { formBuilder.AppendLine("
        "); } formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); //end of control formBuilder.AppendLine("
        "); //end form group formBuilder.AppendLine("
        "); //end of 5 col div break; #endregion #region MultiPicklist //formBuilder.AppendLine(""); case pNums.FieldType.MultiPicklist: //5 col div formBuilder.AppendLine("
        "); //form group formBuilder.AppendLine("
        "); //label if (!ctrl.isLabelHidden) { formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); } else { formBuilder.AppendLine("
        "); } formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); //end of control formBuilder.AppendLine("
        "); //end form group formBuilder.AppendLine("
        "); //end of 5 col div break; #endregion #region Grid case pNums.FieldType.Grid: //5 col div formBuilder.AppendLine("
        "); //form group formBuilder.AppendLine("
        "); //no label //span 12 columns, not 8 /* CVH 2016-01-25 Add ID tag to be able to FindControl */ if (!ctrl.isLabelHidden) { formBuilder.AppendLine(""); } formBuilder.AppendLine("
        "); foreach (oSurface gridSurface in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurface), "name", ctrl.relationalSurface)) { if (!File.Exists(HttpContext.Current.Server.MapPath("~/controls/surface/" + gridSurface.name + ".ascx"))) { surfaceHandler.BuildSurfaceAppTemplate(gridSurface, "~/controls/surface/surface.ascx", "~/controls/surface/", true); } formBuilder.AppendLine(BuildSurfaceGrid(gridSurface, true, true, "", ctrl.surfaceFieldName)); break; } //formBuilder.AppendLine(""); //end of findControl dvi formBuilder.AppendLine("
        "); //end of control formBuilder.AppendLine("
        "); //end form group formBuilder.AppendLine("
        "); //end of 5 col div break; #endregion #region Sales case pNums.FieldType.Sales: //CVH 2016-09-23 No sales user control required here break; #endregion #region Image case pNums.FieldType.Image: //5 col div formBuilder.AppendLine("
        "); //form group formBuilder.AppendLine("
        "); //label if (!ctrl.isLabelHidden) { formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine(SetActionButton(ctrl)); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); } else { formBuilder.AppendLine("
        "); } formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); //end of control formBuilder.AppendLine("
        "); //end form group formBuilder.AppendLine("
        "); //end of 5 col div break; #endregion #region Control case pNums.FieldType.Control: string controlType = string.Empty; string controlPath = string.Empty; string controlName = string.Empty; foreach (oModule module in xData.GetTypedByCriteriaSpecific("recId", typeof(oModule), "recId", ctrl.controlledValue)) { controlType = module.module; controlPath = module.control; controlName = module.objectName; } if (!ctrl.isLabelHidden) { formBuilder.AppendLine(""); } //12 col div formBuilder.AppendLine("
        "); //form group formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); //control formBuilder.AppendLine(GetUserControl(_surface, controlType, controlPath, controlName, true, ctrl.surfaceFieldName, group.surfaceFieldName)); //close div formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); //end form group formBuilder.AppendLine("
        "); break; #endregion #region Label case pNums.FieldType.Label: //5 col div formBuilder.AppendLine("
        "); //form group formBuilder.AppendLine("
        "); bool labelset = false; if (ctrl.relationalSurface.ToString() != "date" && ctrl.relationalSurface.ToString() != "user" && ctrl.relationalSurface.ToString() != "static") { foreach (oSurfaceField sourceField in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceField), "surfaceId,recId", ctrl.relationalSurface.ToString() + "," + ctrl.relationalFields.ToString())) { pNums.FieldType sourceType = (pNums.FieldType)Enum.ToObject(typeof(pNums.FieldType), sourceField.surfaceFieldTypeId); switch (sourceType) { case pNums.FieldType.Image: //image formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); labelset = true; break; case pNums.FieldType.Attachment: default: //label formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); labelset = true; break; } } } //CVH 2017-11-30 Move out of IF statement, need to build it for date, user and static labels too. if (!labelset) { formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); } formBuilder.AppendLine("
        "); //end of control formBuilder.AppendLine("
        "); //end form group formBuilder.AppendLine("
        "); //end of 5 col div break; #endregion #region Button case pNums.FieldType.Button: //5 col div formBuilder.AppendLine("
        "); //form group formBuilder.AppendLine("
        "); //label if (!ctrl.isLabelHidden) { formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); } else { formBuilder.AppendLine("
        "); } formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); //end of control formBuilder.AppendLine("
        "); //end form group formBuilder.AppendLine("
        "); //end of 5 col div break; #endregion #region Address case pNums.FieldType.Address: //5 col div formBuilder.AppendLine("
        "); //form group formBuilder.AppendLine("
        "); //label if (!ctrl.isLabelHidden) { formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); } else { formBuilder.AppendLine("
        "); } formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); //end of control formBuilder.AppendLine("
        "); //end form group formBuilder.AppendLine("
        "); //end of 5 col div break; #endregion #region Placeholder case pNums.FieldType.Placeholder: //5 col div formBuilder.AppendLine("
        "); //form group formBuilder.AppendLine("
        "); //label if (!ctrl.isLabelHidden) { formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); } else { formBuilder.AppendLine("
        "); } formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); //end of control formBuilder.AppendLine("
        "); //end form group formBuilder.AppendLine("
        "); //end of 5 col div break; #endregion #region BarcodeScanner case pNums.FieldType.BarcodeScanner: formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); if (!ctrl.isLabelHidden) { formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); } else { formBuilder.AppendLine("
        "); } formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); break; #endregion } } } 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("
        "); formBuilder.AppendLine(""); //end of group } result = formBuilder.ToString(); } catch (Exception ex) { exception.HandleException("handler:", MethodBase.GetCurrentMethod().Name, ex, HttpContext.Current.Session["user"]); } return result; } /// /// Build Surface Bulk Update Modal Field /// /// /// /// private static string BuildSurfaceBulkUpdateModalField(oSurface _surface, oSurfaceField bulkField) { string result = String.Empty; StringBuilder formBuilder = new StringBuilder(); try { string capitalize = ""; if (_surface.isCapitalizeInput) capitalize = " onchange=\"capitalize(this)\" "; string validationGroup = "BulkUpdate"; string borderClass = ""; int fieldSize = 6; int labelSize = 4, valueSize = 8; borderClass = ""; if (bulkField.hasFullBorder) borderClass = borderClass + " surfaceFieldBorder"; if (bulkField.hasBottomBorder) borderClass = borderClass + " surfaceFieldBorderBottom"; fieldSize = bulkField.surfaceFieldSize == 0 ? 6 : bulkField.surfaceFieldSize; labelSize = bulkField.labelSize == 0 ? 4 : bulkField.labelSize; valueSize = 12 - labelSize; string displayText = bulkField.controlText != "" ? bulkField.controlText : bulkField.surfaceFieldDisplay; switch ((pNums.FieldType)Enum.ToObject(typeof(pNums.FieldType), bulkField.surfaceFieldTypeId)) { #region Number case pNums.FieldType.Number: //5 col div formBuilder.AppendLine("
        "); //form group formBuilder.AppendLine("
        "); //label if (!bulkField.isLabelHidden) { formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); } else { formBuilder.AppendLine("
        "); } formBuilder.AppendLine(""); if (bulkField.required && !_surface.isDisableRequired) { formBuilder.AppendLine(""); } break; #endregion #region Decimal case pNums.FieldType.Decimal: //5 col div formBuilder.AppendLine("
        "); //form group formBuilder.AppendLine("
        "); //label if (!bulkField.isLabelHidden) { formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine(SetActionButton(bulkField)); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); } else { formBuilder.AppendLine("
        "); } if (bulkField.isCurrency) { formBuilder.AppendLine("
        "); string currencySymbol = "R"; formBuilder.AppendLine("" + currencySymbol + ""); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); } else { formBuilder.AppendLine(""); } if (bulkField.required && !_surface.isDisableRequired) { formBuilder.AppendLine(""); } break; #endregion #region Date case pNums.FieldType.Date: //5 col div formBuilder.AppendLine("
        "); //form group formBuilder.AppendLine("
        "); //label if (!bulkField.isLabelHidden) { formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine(SetActionButton(bulkField)); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); } else { formBuilder.AppendLine("
        "); } //CVH 2017-03-01 Cater for Year date type if (bulkField.surfaceDateTypeId == pNums.SurfaceDateType.Year.GetHashCode()) { formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); } //CVH 2016-10-06 Cater for Month/Year date type else if (bulkField.surfaceDateTypeId == pNums.SurfaceDateType.MonthYear.GetHashCode()) { formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); } else { //CVH 2017-07-18 Remove data-provide=\"datepicker-inline\" - causes double calendar formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); //default dd/MM/yyyy string regularExp = "^(((((0[1-9])|(1\\d)|(2[0-8]))\\/((0[1-9])|(1[0-2])))|((31\\/((0[13578])|(1[02])))|((29|30)\\/((0[1,3-9])|(1[0-2])))))\\/((20[0-9][0-9])|(19[0-9][0-9])))|((29\\/02\\/(19|20)(([02468][048])|([13579][26]))))$"; if (utils.displayDateFormat() == "yyyy/MM/dd") regularExp = "^(((20[0-9][0-9])|(19[0-9][0-9]))\\/((((0[1-9])|(1[0-2]))\\/((0[1-9])|(1\\d)|(2[0-8])))|((((0[13578])|(1[02]))\\/31)|(((0[1,3-9])|(1[0-2]))\\/(29|30)))))|(((19|20)(([02468][048])|([13579][26]))\\/02\\/29))$"; formBuilder.AppendLine(""); } break; #endregion #region Picklist case pNums.FieldType.Picklist: //5 col div formBuilder.AppendLine("
        "); //form group formBuilder.AppendLine("
        "); //label if (!bulkField.isLabelHidden) { formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); } else { formBuilder.AppendLine("
        "); } ArrayList lookupList = xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceLookup), "categoryId", bulkField.lookupCategory.ToString(), "sequence"); //no wants reason functionality required for now, leave it out. Too many complications, need postback to enable textbox formBuilder.AppendLine(""); formBuilder.AppendLine("select.."); foreach (oSurfaceLookup look in lookupList) { formBuilder.AppendLine("" + look.display + ""); } formBuilder.AppendLine(""); if (bulkField.required && !_surface.isDisableRequired) { formBuilder.AppendLine(""); } break; #endregion #region Caption case pNums.FieldType.Caption: //5 col div formBuilder.AppendLine("
        "); //form group formBuilder.AppendLine("
        "); //label if (!bulkField.isLabelHidden) { formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); } else { formBuilder.AppendLine("
        "); } formBuilder.AppendLine(""); //formBuilder.AppendLine(""); if (bulkField.required && !_surface.isDisableRequired) { formBuilder.AppendLine(""); } break; #endregion } formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); result = formBuilder.ToString(); } catch (Exception ex) { exception.HandleException("handler:", MethodBase.GetCurrentMethod().Name, ex, HttpContext.Current.Session["user"]); } return result; } private static string BuildSurfaceBulkUpdateModal(oSurface _surface) { string result = String.Empty; StringBuilder formBuilder = new StringBuilder(); try { //get all fields, need to build field sequence based on where it's built on form, per header group, tab, group ArrayList allFields = xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceField), "surfaceId,isActive", _surface.recId + ",1", "sequence"); //if there are no bulk fields, return empty string if (allFields.Cast().Count(d => d.enableBulkUpdate) <= 0) { return result; } formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); //build all header group fields first ArrayList grpHeaderFields = new ArrayList(allFields.Cast() .Where(d => d.surfaceFieldTypeId == pNums.FieldType.HeaderGroup.GetHashCode()) .ToList()); foreach (oSurfaceField grpHdrField in grpHeaderFields) { ArrayList hdrFields = new ArrayList(allFields.Cast() .Where(d => d.enableBulkUpdate && d.parentId == grpHdrField.recId) .ToList()); foreach (oSurfaceField hdrField in hdrFields) { formBuilder.AppendLine(BuildSurfaceBulkUpdateModalField(_surface, hdrField)); } } //then loop through tabs ArrayList tabFields = new ArrayList(allFields.Cast() .Where(d => d.surfaceFieldTypeId == pNums.FieldType.Tab.GetHashCode()) .ToList()); foreach (oSurfaceField tabField in tabFields) { //loop through group fields in tab ArrayList grpFields = new ArrayList(allFields.Cast() .Where(d => d.surfaceFieldTypeId == pNums.FieldType.Group.GetHashCode() && d.parentId == tabField.recId) .ToList()); foreach (oSurfaceField grpField in grpFields) { //loop through all fields linked to group and enable bulk is true ArrayList bulkFields = new ArrayList(allFields.Cast() .Where(d => d.enableBulkUpdate && d.parentId == grpField.recId) .ToList()); foreach (oSurfaceField bulkField in bulkFields) { formBuilder.AppendLine(BuildSurfaceBulkUpdateModalField(_surface, bulkField)); } } } formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); result = formBuilder.ToString(); } catch (Exception ex) { exception.HandleException("handler:", MethodBase.GetCurrentMethod().Name, ex, HttpContext.Current.Session["user"]); } return result; } /// /// Import Data to Surface /// /// /// public static bool ImportDataToSurface(DataTable sourcedata, int surfaceId, int _parentItemId = 0) { bool result = false; try { //CVH 2018-03-06 Need setup for SBF custom import. Handler.ReturnSetup throws exception in parallel oSetup setup = (oSetup)(xData.GetTypedByCriteriaSpecific("recId", typeof(oSetup), "isActive", "1")[0]); ArrayList fields = xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceField), "surfaceId", surfaceId.ToString(), "sequence"); ArrayList fieldData = new ArrayList(); foreach (DataRow drow in sourcedata.Rows) { try { //create new surface item oSurfaceItem item = new oSurfaceItem(); item.surfaceId = surfaceId; item.isActive = true; //CVH 2016-09-15 isDeleted item.isDeleted = false; item.dateCreated = DateTime.Now; item.createdBy = handler.ReturnUser().recId; item.recId = xData.SaveTyped("recId", typeof(oSurfaceItem), item); if (item.recId > 0) { #region CVH SBF custom import backup //CVH 2018-03-05 Temporary code to use for SBF import of Application and Recruitment surface - auto create Profile item //oSurfaceItem profileItem = new oSurfaceItem(); //oSurfaceItem resultItem = new oSurfaceItem(); //ArrayList fieldsResult = xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceField), "surfaceId", "3072"); //ArrayList fieldDataResult = new ArrayList(); //if (setup.code == "STUD-1" && surfaceId == 3098) //{ // //create item // profileItem.createdBy = 0; // profileItem.dateCreated = System.DateTime.Now; // profileItem.isActive = true; // profileItem.surfaceId = 3038; // profileItem.recId = xData.SaveTyped("recId", typeof(oSurfaceItem), profileItem); // //create data // foreach (oSurfaceField profileField in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceField), "surfaceId", profileItem.surfaceId.ToString())) // { // oSurfaceFieldData profileData = new oSurfaceFieldData(); // profileData.surfaceFieldID = profileField.recId; // profileData.surfaceId = profileField.surfaceId; // profileData.surfaceItemId = profileItem.recId; // //set status, sub status // if (profileField.surfaceFieldName == "ProfileHeader_Status") // profileData.surfaceFieldLookupID = 1334; //Status // else if (profileField.surfaceFieldName == "ProfileHeader_ApplicantSubStatus") // { // string subStatus = drow["ProfileHeader_ApplicantSubStatus"].ToString(); // int lookupId = 0; // if (subStatus != "") // { // foreach (oSurfaceLookup look in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceLookup), "categoryId,display", "1072," + subStatus)) // { // lookupId = look.recId; // } // } // profileData.surfaceFieldLookupID = lookupId; // } // profileData.recId = xData.SaveTyped("recId", typeof(oSurfaceFieldData), profileData); // } // //create sbf exam result item // resultItem.createdBy = 0; // resultItem.dateCreated = System.DateTime.Now; // resultItem.isActive = true; // resultItem.surfaceId = 3072; //ApplicantSBFExamResults // resultItem.surfaceLinkItems = profileItem.recId.ToString(); // resultItem.recId = xData.SaveTyped("recId", typeof(oSurfaceItem), resultItem); //} #endregion foreach (DataColumn column in sourcedata.Columns) { foreach (oSurfaceField field in fields) { if (utils.stripCharacters(column.ColumnName.Replace("-:-", "_")).Replace(" ", "") == utils.stripCharacters(field.surfaceFieldName).Replace(" ", "")) { oSurfaceFieldData dataField = new oSurfaceFieldData(); dataField.surfaceFieldID = field.recId; dataField.surfaceId = surfaceId; dataField.surfaceItemId = item.recId; //check the field type pNums.FieldType typ = (pNums.FieldType)Enum.ToObject(typeof(pNums.FieldType), field.surfaceFieldTypeId); switch (typ) { case pNums.FieldType.Label://label case pNums.FieldType.Text://text dataField.surfaceFieldValueChar = drow[column.ColumnName].ToString(); break; case pNums.FieldType.Checkbox://checkbox if (drow[column.ColumnName].ToString().ToLower() == "true") { dataField.surfaceFieldValueBool = true; } else if (drow[column.ColumnName].ToString().ToLower() == "1") { dataField.surfaceFieldValueBool = true; } else if (drow[column.ColumnName].ToString().ToLower() == "yes") { dataField.surfaceFieldValueBool = true; } else { dataField.surfaceFieldValueBool = false; } break; case pNums.FieldType.Date: if (drow[column.ColumnName].ToString() != String.Empty) { if (field.surfaceDateTypeId == (int)pNums.SurfaceDateType.Year) { int yr = 0; int.TryParse(drow[column.ColumnName].ToString(), out yr); if (yr > 0) { DateTime myDateVal = new DateTime(yr, 1, 1); dataField.surfaceFieldValueDate = myDateVal; } else { dataField.surfaceFieldValueDate = utils.formatStringToDate(drow[column.ColumnName].ToString()); } } else { dataField.surfaceFieldValueDate = utils.formatStringToDate(drow[column.ColumnName].ToString()); } } break; case pNums.FieldType.Time: if (drow[column.ColumnName].ToString() != String.Empty) { dataField.surfaceFieldValueTime = utils.formatStringToTime(drow[column.ColumnName].ToString()); } break; case pNums.FieldType.Decimal: decimal decimalValue = 0; decimal.TryParse(drow[column.ColumnName].ToString().Replace(" ", "").Replace("R", "").Replace("%", ""), out decimalValue); dataField.surfaceFieldValueDecimal = decimalValue; break; case pNums.FieldType.Number: #region CVH SBF custom import backup //CVH 2018-03-05 Temporary code to use for SBF import of Application and Recruitment surface - auto create Profile item //if (setup.code == "STUD-1" && field.surfaceFieldName == "ParentSurfaceItemId" && field.surfaceId == 3098) //{ // dataField.surfaceFieldValueNum = profileItem.recId; // break; //} #endregion if (_parentItemId > 0 && field.surfaceFieldName == "ParentSurfaceItemId") { dataField.surfaceFieldValueNum = _parentItemId; } else { int intValue = 0; int.TryParse(drow[column.ColumnName].ToString(), out intValue); dataField.surfaceFieldValueNum = intValue; } break; case pNums.FieldType.Picklist: //CVH lookupDisplay~reason string picklistValue = drow[column.ColumnName].ToString(); if (picklistValue != null && picklistValue.Trim() != String.Empty) { string lookupDisplay = ""; string reason = ""; if (picklistValue.IndexOf("~") >= 0) { lookupDisplay = picklistValue.Substring(0, picklistValue.IndexOf("~")); reason = picklistValue.Substring(picklistValue.IndexOf("~") + 1); } else { lookupDisplay = picklistValue; } if (lookupDisplay != "") { ArrayList pickListValues = xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceLookup), "categoryId,display", field.lookupCategory + "," + lookupDisplay); if (pickListValues.Count > 0) { foreach (oSurfaceLookup look in pickListValues) { dataField.surfaceFieldLookupID = look.recId; dataField.surfaceFieldValueChar = reason; } } else { oSurfaceLookup lookAdd = new oSurfaceLookup(); lookAdd.categoryId = field.lookupCategory; lookAdd.display = lookupDisplay; lookAdd.isActive = true; lookAdd.sequence = 1; lookAdd.recId = xData.SaveTyped("recId", typeof(oSurfaceLookup), lookAdd); if (lookAdd.recId > 0) { dataField.surfaceFieldLookupID = lookAdd.recId; dataField.surfaceFieldValueChar = reason; } } } } break; case pNums.FieldType.RadioButtonList: //CVH lookupDisplay~reason string radioValue = drow[column.ColumnName].ToString(); if (radioValue != null && radioValue.Trim() != String.Empty) { string lookupDisplay = ""; string reason = ""; if (radioValue.IndexOf("~") >= 0) { lookupDisplay = radioValue.Substring(0, radioValue.IndexOf("~")); reason = radioValue.Substring(radioValue.IndexOf("~") + 1); } else { lookupDisplay = radioValue; } if (lookupDisplay != "") { ArrayList radioListValues = xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceLookup), "categoryId,display", field.lookupCategory + "," + lookupDisplay); if (radioListValues.Count > 0) { foreach (oSurfaceLookup look in radioListValues) { dataField.surfaceFieldLookupID = look.recId; dataField.surfaceFieldValueChar = reason; } } else { oSurfaceLookup lookAdd = new oSurfaceLookup(); lookAdd.categoryId = field.lookupCategory; lookAdd.display = lookupDisplay; lookAdd.isActive = true; lookAdd.sequence = 1; lookAdd.recId = xData.SaveTyped("recId", typeof(oSurfaceLookup), lookAdd); if (lookAdd.recId > 0) { dataField.surfaceFieldLookupID = lookAdd.recId; dataField.surfaceFieldValueChar = reason; } } } } break; case pNums.FieldType.CheckboxList: //CVH lookupDisplay~reason|lookupDisplay~reason Save as lookupId~R~Reason~|~ string checkValue = drow[column.ColumnName].ToString(); if (checkValue != null && checkValue.Trim() != String.Empty) { dataField.surfaceFieldValueChar = ""; foreach (string value in checkValue.Split('|')) { string lookupDisplay = ""; string reason = ""; if (value.IndexOf("~") >= 0) { lookupDisplay = value.Substring(0, value.IndexOf("~")); reason = value.Substring(value.IndexOf("~") + 1); } else { lookupDisplay = value; } if (lookupDisplay != "") { ArrayList checkListValues = xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceLookup), "categoryId,display", field.lookupCategory + "," + lookupDisplay); if (checkListValues.Count > 0) { foreach (oSurfaceLookup look in checkListValues) { dataField.surfaceFieldValueChar += look.recId.ToString() + "~R~" + reason + "~|~"; } } else { oSurfaceLookup lookAdd = new oSurfaceLookup(); lookAdd.categoryId = field.lookupCategory; lookAdd.display = lookupDisplay; lookAdd.isActive = true; lookAdd.sequence = 1; lookAdd.recId = xData.SaveTyped("recId", typeof(oSurfaceLookup), lookAdd); if (lookAdd.recId > 0) { dataField.surfaceFieldValueChar += lookAdd.recId.ToString() + "~R~" + reason + "~|~"; } } } } } break; case pNums.FieldType.MultiPicklist: string multiValue = drow[column.ColumnName].ToString(); if (multiValue != null && multiValue.Trim() != String.Empty) { dataField.surfaceFieldValueChar = ""; foreach (string value in multiValue.Split('|')) { if (value != "") { ArrayList multiPicklistValues = xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceLookup), "categoryId,display", field.lookupCategory + "," + value); if (multiPicklistValues.Count > 0) { foreach (oSurfaceLookup look in multiPicklistValues) { if (dataField.surfaceFieldValueChar == "") dataField.surfaceFieldValueChar = look.recId.ToString(); else dataField.surfaceFieldValueChar += "," + look.recId.ToString(); } } else { oSurfaceLookup lookAdd = new oSurfaceLookup(); lookAdd.categoryId = field.lookupCategory; lookAdd.display = value; lookAdd.isActive = true; lookAdd.sequence = 1; lookAdd.recId = xData.SaveTyped("recId", typeof(oSurfaceLookup), lookAdd); if (lookAdd.recId > 0) { if (dataField.surfaceFieldValueChar == "") dataField.surfaceFieldValueChar = lookAdd.recId.ToString(); else dataField.surfaceFieldValueChar += "," + lookAdd.recId.ToString(); } } } } } break; case pNums.FieldType.Address: //CVH Street,Suburb,City,Province,South Africa,Postal Code. Saved as ~1~Street~|~~2~Suburb~|~ etc. if (drow[column.ColumnName].ToString() != String.Empty) { string address = ""; int line = 1; foreach (string addressLine in drow[column.ColumnName].ToString().Split(',')) { address += "~" + line.ToString() + "~" + addressLine.Trim() + "~|~"; line++; } dataField.surfaceFieldValueChar = address; } break; case pNums.FieldType.Caption://caption dataField.surfaceFieldValueChar = drow[column.ColumnName].ToString(); break; case pNums.FieldType.FormulaField: decimal valueDecimal = 0; if (decimal.TryParse(drow[column.ColumnName].ToString(), out valueDecimal)) { dataField.surfaceFieldValueDecimal = valueDecimal; } else //assume textbox { dataField.surfaceFieldValueChar = drow[column.ColumnName].ToString(); } break; } fieldData.Add(dataField); break; } } #region CVH SBF custom import backup //CVH 2018-03-05 Add temporary code to import SBF Exam results at the same time as Application and Recruitment record //if (setup.code == "STUD-1" && surfaceId == 3098 && // (column.ColumnName == "ApplicantSBFExamResults-:-SBFExamResults-:-SBFMaths" || column.ColumnName == "ApplicantSBFExamResults-:-SBFExamResults-:-SBFEnglish" || // column.ColumnName == "ApplicantSBFExamResults-:-SBFExamResults-:-SBFEssay" || // column.ColumnName == "PartADETAILSOFAPPLICANT-:-PartADETAILSOFAPPLICANT-:-Surname" || column.ColumnName == "PartADETAILSOFAPPLICANT-:-PartADETAILSOFAPPLICANT-:-FirstName")) //{ // foreach (oSurfaceField resultField in fieldsResult) // { // if (utils.stripCharacters(column.ColumnName.Replace("-:-", "_")).Replace(" ", "") == utils.stripCharacters(resultField.surfaceFieldName).Replace(" ", "")) // { // oSurfaceFieldData dataFieldResult = new oSurfaceFieldData(); // dataFieldResult.surfaceFieldID = resultField.recId; // dataFieldResult.surfaceId = resultItem.surfaceId; // dataFieldResult.surfaceItemId = resultItem.recId; // decimal decimalValue = 0; // decimal.TryParse(drow[column.ColumnName].ToString().Replace(" ", "").Replace("R", "").Replace("%", ""), out decimalValue); // dataFieldResult.surfaceFieldValueDecimal = decimalValue; // fieldDataResult.Add(dataFieldResult); // } // else if ((column.ColumnName == "PartADETAILSOFAPPLICANT-:-PartADETAILSOFAPPLICANT-:-Surname" && resultField.surfaceFieldName == "ApplicantSBFExamResults_SBFExamResults_Surname") // || (column.ColumnName == "PartADETAILSOFAPPLICANT-:-PartADETAILSOFAPPLICANT-:-FirstName" && resultField.surfaceFieldName == "ApplicantSBFExamResults_SBFExamResults_FirstName")) // { // oSurfaceFieldData dataFieldResult = new oSurfaceFieldData(); // dataFieldResult.surfaceFieldID = resultField.recId; // dataFieldResult.surfaceId = resultItem.surfaceId; // dataFieldResult.surfaceItemId = resultItem.recId; // dataFieldResult.surfaceFieldValueChar = drow[column.ColumnName].ToString(); // fieldDataResult.Add(dataFieldResult); // } // } //} #endregion } #region SCHO-1 custom import if (setup.code == "SCHO-1") { if (_parentItemId > 0) { oSurfaceField field = fields.Cast().ToList().Where(f => f.surfaceFieldName == "ParentSurfaceItemId").SingleOrDefault(); oSurfaceFieldData dataField = new oSurfaceFieldData(); dataField.surfaceFieldID = field.recId; dataField.surfaceId = surfaceId; dataField.surfaceItemId = item.recId; dataField.surfaceFieldValueNum = _parentItemId; fieldData.Add(dataField); } oSurfaceField uniqueQRCodeField = fields.Cast().ToList().Where(f => f.surfaceFieldName == "EventAttendees_EventAttendeeDetails_UniqueQRcode").SingleOrDefault(); oSurfaceFieldData uniqueQRCodeDataField = new oSurfaceFieldData(); uniqueQRCodeDataField.surfaceFieldID = uniqueQRCodeField.recId; uniqueQRCodeDataField.surfaceId = surfaceId; uniqueQRCodeDataField.surfaceItemId = item.recId; string uniqueQRCode = utils.RandomString(8, true); uniqueQRCodeDataField.surfaceFieldValueChar = uniqueQRCode; fieldData.Add(uniqueQRCodeDataField); oSurfaceField QRCodeField = fields.Cast().ToList().Where(f => f.surfaceFieldName == "EventAttendees_EventAttendeeDetails_QRCodeString").SingleOrDefault(); oSurfaceFieldData QRCodeDataField = new oSurfaceFieldData(); QRCodeDataField.surfaceFieldID = QRCodeField.recId; QRCodeDataField.surfaceId = surfaceId; QRCodeDataField.surfaceItemId = item.recId; string redirectLink = $"{handler.ReturnConfigAppSetting("WebAddyLiveMVC")}Account/Logon?QR={uniqueQRCode}"; QRCodeDataField.surfaceFieldValueChar = redirectLink; fieldData.Add(QRCodeDataField); } #endregion if (fieldData.Count > 0) { xData.SaveTypedCollection("recId", typeof(oSurfaceFieldData), fieldData); if (setup.code == "SCHO-1" && setup.code == "EVOL-1" && setup.code == "FAST-2") { xData.SaveSurfaceItemToQueryTable(surfaceId, item.recId); } fieldData.Clear(); } #region CVH SBF custom import backup //CVH 2018-03-05 Add temporary code to import SBF Exam results at the same time as Application and Recruitment record //if (setup.code == "STUD-1" && surfaceId == 3098 && fieldDataResult.Count > 0) //{ // xData.SaveTypedCollection("recId", typeof(oSurfaceFieldData), fieldDataResult); // fieldDataResult.Clear(); //} #endregion } } catch (Exception ex) { exception.HandleException("surfaceHandler:", MethodBase.GetCurrentMethod().Name, ex, HttpContext.Current.Session["user"]); return false; } // } //}); } result = true; } catch (Exception ex) { exception.HandleException("surfaceHandler:", MethodBase.GetCurrentMethod().Name, ex, HttpContext.Current.Session["user"]); } return result; } /// /// Import Data to Surface /// /// /// public static bool AdminColourImportDataToSurface(DataTable sourcedata, int surfaceId, int _parentItemId = 0) { bool result = false, verifyRecord = true; ArrayList _objAdminFabricColourList = new ArrayList(); ArrayList _objAdminTrimcColourList = new ArrayList(); ArrayList _objAdminZipColourList = new ArrayList(); try { foreach (DataRow drow in sourcedata.Rows) { try { if (surfaceId == 3100 || surfaceId == 3101 || surfaceId == 3102) { if (surfaceId == 3100) verifyRecord = xData.VerifyExists("recId", typeof(oAdminFabricColours), "FabricColours_FabricColours_FabricColour", drow["FabricColours_FabricColours_FabricColour"].ToString(), "", "qt_", false); else if (surfaceId == 3101) verifyRecord = xData.VerifyExists("recId", typeof(oAdminTrimColours), "TrimColours_TrimColours_TrimColour", drow["TrimColours_TrimColours_TrimColour"].ToString(), "", "qt_", false); else if (surfaceId == 3102) verifyRecord = xData.VerifyExists("recId", typeof(oAdminZipColours), "ZipColours_ZipColours_ZipColour", drow["ZipColours_ZipColours_ZipColour"].ToString(), "", "qt_", false); if (!verifyRecord) { oSurfaceItem item = new oSurfaceItem(); item.surfaceId = surfaceId; item.isActive = true; //CVH 2016-09-15 isDeleted item.isDeleted = false; item.dateCreated = DateTime.Now; item.createdBy = handler.ReturnUser()?.recId == 0 ? -1 : handler.ReturnUser().recId; item.recId = xData.SaveTyped("recId", typeof(oSurfaceItem), item); if (item.recId > 0) { if (surfaceId == 3100) { oAdminFabricColours fabricColour = new oAdminFabricColours(); fabricColour.itemID = item.recId; fabricColour.surfaceId = 3100; fabricColour.isActive = true; fabricColour.editAccessType = 1; fabricColour.allowRemove = true; fabricColour.removeAccessType = 3; fabricColour.userType = Convert.ToInt32(drow["userType"].ToString()); fabricColour.FabricColours_FabricColours_MasterColour = drow["FabricColours_FabricColours_MasterColour"].ToString(); fabricColour.FabricColours_FabricColours_FabricColour = drow["FabricColours_FabricColours_FabricColour"].ToString(); _objAdminFabricColourList.Add(fabricColour); } else if (surfaceId == 3101) { oAdminTrimColours trimColour = new oAdminTrimColours(); trimColour.itemID = item.recId; trimColour.surfaceId = 3100; trimColour.isActive = true; trimColour.editAccessType = 1; trimColour.allowRemove = true; trimColour.removeAccessType = 3; trimColour.userType = Convert.ToInt32(drow["userType"].ToString()); trimColour.TrimColours_TrimColours_MasterColour = drow["TrimColours_TrimColours_MasterColour"].ToString(); trimColour.TrimColours_TrimColours_TrimColour = drow["TrimColours_TrimColours_TrimColour"].ToString(); _objAdminTrimcColourList.Add(trimColour); } else if (surfaceId == 3102) { oAdminZipColours zipColour = new oAdminZipColours(); zipColour.itemID = item.recId; zipColour.surfaceId = 3100; zipColour.isActive = true; zipColour.editAccessType = 1; zipColour.allowRemove = true; zipColour.removeAccessType = 3; zipColour.userType = Convert.ToInt32(drow["userType"].ToString()); zipColour.ZipColours_ZipColours_MasterColour = drow["ZipColours_ZipColours_MasterColour"].ToString(); zipColour.ZipColours_ZipColours_ZipColour = drow["ZipColours_ZipColours_ZipColour"].ToString(); _objAdminZipColourList.Add(zipColour); } oSetup setup = (oSetup)(xData.GetTypedByCriteriaSpecific("recId", typeof(oSetup), "isActive", "1")[0]); ArrayList fields = xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceField), "surfaceId", surfaceId.ToString(), "sequence"); ArrayList fieldData = new ArrayList(); foreach (DataColumn column in sourcedata.Columns) { foreach (oSurfaceField field in fields) { if (utils.stripCharacters(column.ColumnName.Replace("-:-", "_")).Replace(" ", "") == utils.stripCharacters(field.surfaceFieldName).Replace(" ", "")) { oSurfaceFieldData dataField = new oSurfaceFieldData(); dataField.surfaceFieldID = field.recId; dataField.surfaceId = surfaceId; dataField.surfaceItemId = item.recId; //check the field type pNums.FieldType typ = (pNums.FieldType)Enum.ToObject(typeof(pNums.FieldType), field.surfaceFieldTypeId); switch (typ) { case pNums.FieldType.Label://label case pNums.FieldType.Text://text dataField.surfaceFieldValueChar = drow[column.ColumnName].ToString(); break; case pNums.FieldType.Checkbox://checkbox if (drow[column.ColumnName].ToString().ToLower() == "true") { dataField.surfaceFieldValueBool = true; } else if (drow[column.ColumnName].ToString().ToLower() == "1") { dataField.surfaceFieldValueBool = true; } else if (drow[column.ColumnName].ToString().ToLower() == "yes") { dataField.surfaceFieldValueBool = true; } else { dataField.surfaceFieldValueBool = false; } break; case pNums.FieldType.Date: if (drow[column.ColumnName].ToString() != String.Empty) { if (field.surfaceDateTypeId == (int)pNums.SurfaceDateType.Year) { int yr = 0; int.TryParse(drow[column.ColumnName].ToString(), out yr); if (yr > 0) { DateTime myDateVal = new DateTime(yr, 1, 1); dataField.surfaceFieldValueDate = myDateVal; } else { dataField.surfaceFieldValueDate = utils.formatStringToDate(drow[column.ColumnName].ToString()); } } else { dataField.surfaceFieldValueDate = utils.formatStringToDate(drow[column.ColumnName].ToString()); } } break; case pNums.FieldType.Time: if (drow[column.ColumnName].ToString() != String.Empty) { dataField.surfaceFieldValueTime = utils.formatStringToTime(drow[column.ColumnName].ToString()); } break; case pNums.FieldType.Decimal: decimal decimalValue = 0; decimal.TryParse(drow[column.ColumnName].ToString().Replace(" ", "").Replace("R", "").Replace("%", ""), out decimalValue); dataField.surfaceFieldValueDecimal = decimalValue; break; case pNums.FieldType.Number: if (_parentItemId > 0 && field.surfaceFieldName == "ParentSurfaceItemId") { dataField.surfaceFieldValueNum = _parentItemId; } else { int intValue = 0; int.TryParse(drow[column.ColumnName].ToString(), out intValue); dataField.surfaceFieldValueNum = intValue; } break; case pNums.FieldType.Picklist: //CVH lookupDisplay~reason string picklistValue = drow[column.ColumnName].ToString(); if (picklistValue != null && picklistValue.Trim() != String.Empty) { string lookupDisplay = ""; string reason = ""; if (picklistValue.IndexOf("~") >= 0) { lookupDisplay = picklistValue.Substring(0, picklistValue.IndexOf("~")); reason = picklistValue.Substring(picklistValue.IndexOf("~") + 1); } else { lookupDisplay = picklistValue; } if (lookupDisplay != "") { ArrayList pickListValues = xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceLookup), "categoryId,display", field.lookupCategory + "," + lookupDisplay); if (pickListValues.Count > 0) { foreach (oSurfaceLookup look in pickListValues) { dataField.surfaceFieldLookupID = look.recId; dataField.surfaceFieldValueChar = reason; } } else { oSurfaceLookup lookAdd = new oSurfaceLookup(); lookAdd.categoryId = field.lookupCategory; lookAdd.display = lookupDisplay; lookAdd.isActive = true; lookAdd.sequence = 1; lookAdd.recId = xData.SaveTyped("recId", typeof(oSurfaceLookup), lookAdd); if (lookAdd.recId > 0) { dataField.surfaceFieldLookupID = lookAdd.recId; dataField.surfaceFieldValueChar = reason; } } } } break; case pNums.FieldType.RadioButtonList: //CVH lookupDisplay~reason string radioValue = drow[column.ColumnName].ToString(); if (radioValue != null && radioValue.Trim() != String.Empty) { string lookupDisplay = ""; string reason = ""; if (radioValue.IndexOf("~") >= 0) { lookupDisplay = radioValue.Substring(0, radioValue.IndexOf("~")); reason = radioValue.Substring(radioValue.IndexOf("~") + 1); } else { lookupDisplay = radioValue; } if (lookupDisplay != "") { ArrayList radioListValues = xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceLookup), "categoryId,display", field.lookupCategory + "," + lookupDisplay); if (radioListValues.Count > 0) { foreach (oSurfaceLookup look in radioListValues) { dataField.surfaceFieldLookupID = look.recId; dataField.surfaceFieldValueChar = reason; } } else { oSurfaceLookup lookAdd = new oSurfaceLookup(); lookAdd.categoryId = field.lookupCategory; lookAdd.display = lookupDisplay; lookAdd.isActive = true; lookAdd.sequence = 1; lookAdd.recId = xData.SaveTyped("recId", typeof(oSurfaceLookup), lookAdd); if (lookAdd.recId > 0) { dataField.surfaceFieldLookupID = lookAdd.recId; dataField.surfaceFieldValueChar = reason; } } } } break; case pNums.FieldType.CheckboxList: //CVH lookupDisplay~reason|lookupDisplay~reason Save as lookupId~R~Reason~|~ string checkValue = drow[column.ColumnName].ToString(); if (checkValue != null && checkValue.Trim() != String.Empty) { dataField.surfaceFieldValueChar = ""; foreach (string value in checkValue.Split('|')) { string lookupDisplay = ""; string reason = ""; if (value.IndexOf("~") >= 0) { lookupDisplay = value.Substring(0, value.IndexOf("~")); reason = value.Substring(value.IndexOf("~") + 1); } else { lookupDisplay = value; } if (lookupDisplay != "") { ArrayList checkListValues = xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceLookup), "categoryId,display", field.lookupCategory + "," + lookupDisplay); if (checkListValues.Count > 0) { foreach (oSurfaceLookup look in checkListValues) { dataField.surfaceFieldValueChar += look.recId.ToString() + "~R~" + reason + "~|~"; } } else { oSurfaceLookup lookAdd = new oSurfaceLookup(); lookAdd.categoryId = field.lookupCategory; lookAdd.display = lookupDisplay; lookAdd.isActive = true; lookAdd.sequence = 1; lookAdd.recId = xData.SaveTyped("recId", typeof(oSurfaceLookup), lookAdd); if (lookAdd.recId > 0) { dataField.surfaceFieldValueChar += lookAdd.recId.ToString() + "~R~" + reason + "~|~"; } } } } } break; case pNums.FieldType.MultiPicklist: string multiValue = drow[column.ColumnName].ToString(); if (multiValue != null && multiValue.Trim() != String.Empty) { dataField.surfaceFieldValueChar = ""; foreach (string value in multiValue.Split('|')) { if (value != "") { ArrayList multiPicklistValues = xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceLookup), "categoryId,display", field.lookupCategory + "," + value); if (multiPicklistValues.Count > 0) { foreach (oSurfaceLookup look in multiPicklistValues) { if (dataField.surfaceFieldValueChar == "") dataField.surfaceFieldValueChar = look.recId.ToString(); else dataField.surfaceFieldValueChar += "," + look.recId.ToString(); } } else { oSurfaceLookup lookAdd = new oSurfaceLookup(); lookAdd.categoryId = field.lookupCategory; lookAdd.display = value; lookAdd.isActive = true; lookAdd.sequence = 1; lookAdd.recId = xData.SaveTyped("recId", typeof(oSurfaceLookup), lookAdd); if (lookAdd.recId > 0) { if (dataField.surfaceFieldValueChar == "") dataField.surfaceFieldValueChar = lookAdd.recId.ToString(); else dataField.surfaceFieldValueChar += "," + lookAdd.recId.ToString(); } } } } } break; case pNums.FieldType.Address: //CVH Street,Suburb,City,Province,South Africa,Postal Code. Saved as ~1~Street~|~~2~Suburb~|~ etc. if (drow[column.ColumnName].ToString() != String.Empty) { string address = ""; int line = 1; foreach (string addressLine in drow[column.ColumnName].ToString().Split(',')) { address += "~" + line.ToString() + "~" + addressLine.Trim() + "~|~"; line++; } dataField.surfaceFieldValueChar = address; } break; case pNums.FieldType.Caption://caption dataField.surfaceFieldValueChar = drow[column.ColumnName].ToString(); break; case pNums.FieldType.FormulaField: decimal valueDecimal = 0; if (decimal.TryParse(drow[column.ColumnName].ToString(), out valueDecimal)) { dataField.surfaceFieldValueDecimal = valueDecimal; } else //assume textbox { dataField.surfaceFieldValueChar = drow[column.ColumnName].ToString(); } break; } fieldData.Add(dataField); break; } } } if (fieldData.Count > 0) { xData.SaveTypedCollection("recId", typeof(oSurfaceFieldData), fieldData); //Commented on 27-01-2023(not required here) //if (setup.code == "EVOL-1" && setup.code == "FAST-2") //{ // xData.SaveSurfaceItemToQueryTable(surfaceId, item.recId); //} fieldData.Clear(); } } } } } catch (Exception ex) { exception.HandleException("surfaceHandler:", MethodBase.GetCurrentMethod().Name, ex, HttpContext.Current.Session["user"]); } } if (_objAdminFabricColourList.Count > 0) xData.SaveTypedCollection("recId", typeof(oAdminFabricColours), _objAdminFabricColourList, "qt_", false); else if (_objAdminTrimcColourList.Count > 0) xData.SaveTypedCollection("recId", typeof(oAdminTrimColours), _objAdminTrimcColourList, "qt_", false); else if (_objAdminZipColourList.Count > 0) xData.SaveTypedCollection("recId", typeof(oAdminZipColours), _objAdminZipColourList, "qt_", false); result = true; } catch (Exception ex) { exception.HandleException("surfaceHandler:", MethodBase.GetCurrentMethod().Name, ex, HttpContext.Current.Session["user"]); } return result; } /// /// Import Data to Surface /// /// /// public static bool ImportDataToSurfacePublished(DataTable sourcedata, oSurface _surf, int _parentItemId = 0) { bool result = false; try { ArrayList fields = xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceField), "surfaceId", _surf.recId.ToString(), "sequence"); ArrayList fieldData = new ArrayList(); foreach (DataRow drow in sourcedata.Rows) { // Parallel.ForEach(sourcedata.AsEnumerable(), drow => //{ // lock (sourcedata.Columns.SyncRoot) // { //create new surface item oSurfaceItem item = new oSurfaceItem(); item.surfaceId = _surf.recId; item.isActive = true; item.isDeleted = false; item.dateCreated = DateTime.Now; item.recId = xData.SaveTyped("recId", typeof(oSurfaceItem), item); item.createdBy = handler.ReturnUser().recId; if (item.recId > 0) { //build insert query for cols StringBuilder insertBuilder = new StringBuilder(); insertBuilder.AppendLine("INSERT INTO publ_" + _surf.name + " "); insertBuilder.AppendLine("([itemID]"); insertBuilder.AppendLine(",[isActive]"); insertBuilder.AppendLine(",[surfaceId]"); DataTable parentRecords = new DataTable(); ArrayList labelFields = new ArrayList(); if (_parentItemId > 0) { insertBuilder.AppendLine(",[ParentSurfaceItemId]"); foreach (oSurfaceItem surfaceItem in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceItem), "recId", $"{_parentItemId}")) { foreach (oSurface parentSurface in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurface), "recId", $"{surfaceItem.surfaceId}")) { if (parentSurface.isPublished) parentRecords = xData.GetCustomTypedTable($"select * from publ_{parentSurface.name} where itemID = {_parentItemId}"); else parentRecords = xData.GetSurfaceQueryItemData(parentSurface.recId, _parentItemId); } labelFields = xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceField), "surfaceId,relationalSurface", $"{_surf.recId},{surfaceItem.surfaceId}", "sequence"); } } foreach (oSurfaceField labelField in labelFields) { insertBuilder.AppendLine($",[{labelField.surfaceFieldName}]"); } foreach (DataColumn column in sourcedata.Columns) { foreach (oSurfaceField field in fields) { if (!field.surfaceFieldName.StartsWith("_")) { string fieldNameToMatch = field.surfaceFieldName; if (!column.ColumnName.Contains("-:-")) fieldNameToMatch = field.surfaceFieldDisplay; if (field.isActive && field.surfaceFieldName != "ParentSurfaceItemId") { if (utils.stripCharacters(column.ColumnName.Replace("-:-", "_")).Replace(" ", "") == utils.stripCharacters(fieldNameToMatch).Replace(" ", "")) { pNums.FieldType typ = (pNums.FieldType)Enum.ToObject(typeof(pNums.FieldType), field.surfaceFieldTypeId); switch (typ) { case pNums.FieldType.Text://text insertBuilder.AppendLine(",[" + field.surfaceFieldName + "]"); break; case pNums.FieldType.Checkbox://checkbox insertBuilder.AppendLine(",[" + field.surfaceFieldName + "]"); break; case pNums.FieldType.Date: insertBuilder.AppendLine(",[" + field.surfaceFieldName + "]"); break; case pNums.FieldType.Time: insertBuilder.AppendLine(",[" + field.surfaceFieldName + "]"); break; case pNums.FieldType.Decimal: insertBuilder.AppendLine(",[" + field.surfaceFieldName + "]"); break; case pNums.FieldType.Number: insertBuilder.AppendLine(",[" + field.surfaceFieldName + "]"); break; case pNums.FieldType.Picklist: insertBuilder.AppendLine(",[" + field.surfaceFieldName + "]"); break; case pNums.FieldType.RadioButtonList: insertBuilder.AppendLine(",[" + field.surfaceFieldName + "]"); break; case pNums.FieldType.CheckboxList: insertBuilder.AppendLine(",[" + field.surfaceFieldName + "]"); break; case pNums.FieldType.MultiPicklist: insertBuilder.AppendLine(",[" + field.surfaceFieldName + "]"); break; case pNums.FieldType.Address: insertBuilder.AppendLine(",[" + field.surfaceFieldName + "]"); break; case pNums.FieldType.Caption://caption insertBuilder.AppendLine(",[" + field.surfaceFieldName + "]"); break; case pNums.FieldType.FormulaField: insertBuilder.AppendLine(",[" + field.surfaceFieldName + "]"); break; } break; } } } } } insertBuilder.AppendLine(") VALUES ("); insertBuilder.AppendLine(item.recId.ToString()); insertBuilder.AppendLine(",1"); insertBuilder.AppendLine("," + _surf.recId); if (_parentItemId > 0) insertBuilder.AppendLine("," + _parentItemId); foreach (oSurfaceField labelField in labelFields) { string relationalValue = string.Empty; ArrayList relationalFields = xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceField), "recId", $"{labelField.relationalFields}"); if (relationalFields.Count == 1) { oSurfaceField relationalField = (oSurfaceField)relationalFields[0]; if (parentRecords.Rows.Count == 1 && parentRecords.Columns.Contains(relationalField.surfaceFieldName)) { relationalValue = parentRecords.Rows[0][$"{relationalField.surfaceFieldName}"].ToString(); if (relationalField.lookupCategory > 0) { DataTable lookupValue = xData.GetCustomTypedTable($"SELECT Top 1 display FROM pal_SurfaceLookup WHERE categoryId = {relationalField.lookupCategory} AND recId = {relationalValue}"); relationalValue = lookupValue.Rows[0].Field("display"); } } } insertBuilder.AppendLine($",'{relationalValue}'"); } foreach (DataColumn column in sourcedata.Columns) { foreach (oSurfaceField field in fields) { if (!field.surfaceFieldName.StartsWith("_")) { string fieldNameToMatch = field.surfaceFieldName; if (!column.ColumnName.Contains("-:-")) fieldNameToMatch = field.surfaceFieldDisplay; if (field.isActive && field.surfaceFieldName != "ParentSurfaceItemId") { if (utils.stripCharacters(column.ColumnName.Replace("-:-", "_")).Replace(" ", "") == utils.stripCharacters(fieldNameToMatch).Replace(" ", "")) { //check the field type pNums.FieldType typ = (pNums.FieldType)Enum.ToObject(typeof(pNums.FieldType), field.surfaceFieldTypeId); switch (typ) { case pNums.FieldType.Text://text insertBuilder.AppendLine(",'" + utils.formatSqlString(drow[column.ColumnName].ToString()) + "'"); break; case pNums.FieldType.Checkbox://checkbox if (drow[column.ColumnName].ToString().ToLower() == "true") { insertBuilder.AppendLine(",'1'"); } else if (drow[column.ColumnName].ToString().ToLower() == "1") { insertBuilder.AppendLine(",'1'"); } else if (drow[column.ColumnName].ToString().ToLower() == "yes") { insertBuilder.AppendLine(",'1'"); } else { insertBuilder.AppendLine(",'0'"); } break; case pNums.FieldType.Date: if (drow[column.ColumnName].ToString() != String.Empty) { if (field.surfaceDateTypeId == (int)pNums.SurfaceDateType.Year) { int yr = 0; int.TryParse(drow[column.ColumnName].ToString(), out yr); if (yr > 0) { DateTime myDateVal = new DateTime(yr, 1, 1); insertBuilder.AppendLine(",'" + utils.fixDate(myDateVal) + "'"); } else { insertBuilder.AppendLine(",'" + utils.fixDate(utils.formatStringToDate(drow[column.ColumnName].ToString())) + "'"); } } else { insertBuilder.AppendLine(",'" + utils.fixDate(utils.formatStringToDate(drow[column.ColumnName].ToString())) + "'"); } } else insertBuilder.AppendLine(",''"); break; case pNums.FieldType.Time: if (drow[column.ColumnName].ToString() != String.Empty) { insertBuilder.AppendLine(",'" + utils.fixDate(utils.formatStringToTime(drow[column.ColumnName].ToString()))); } break; case pNums.FieldType.Decimal: decimal decimalValue = 0; decimal.TryParse(drow[column.ColumnName].ToString().Replace(" ", "").Replace("R", "").Replace("%", ""), out decimalValue); insertBuilder.AppendLine("," + decimalValue); break; case pNums.FieldType.Number: int intValue = 0; int.TryParse(drow[column.ColumnName].ToString(), out intValue); insertBuilder.AppendLine("," + intValue); break; case pNums.FieldType.Picklist: if (field.isCustomSource) { string picklistValue = drow[column.ColumnName].ToString(); string fieldSelect = String.Empty; String[] flds = field.relationalFields.Split(char.Parse(",")); foreach (string f in flds) { if (fieldSelect == String.Empty) fieldSelect = f; else fieldSelect += " + ' ' + " + f; } if (field.relationalObject != String.Empty) { bool userService = field.relationalObject == "pal_User" ? true : false; if (userService && picklistValue.Contains(","))//handle surname, name { string surname = picklistValue.Substring(0, picklistValue.IndexOf(",")); string name = picklistValue.Replace(" ", "").Substring(picklistValue.IndexOf(",") + 1); picklistValue = name + " " + surname; } string query = "Select " + field.relationalValues + " AS Value FROM " + field.relationalObject + " WHERE (" + fieldSelect + ") = '" + picklistValue + "' "; if (field.relationalObject == "pal_User") query += "AND customerCode = '" + handler.ReturnSetup().code + "'"; DataTable pickData = xData.GetCustomTypedTable(query, userService); if (pickData.Rows.Count > 0) { insertBuilder.AppendLine(",'" + pickData.Rows[0][0].ToString().Replace("'", "''") + "'"); } else { insertBuilder.AppendLine(",''"); } } } else { //CVH lookupDisplay~reason string picklistValue = drow[column.ColumnName].ToString(); if (picklistValue != null && picklistValue.Trim() != String.Empty) { string lookupDisplay = ""; string reason = ""; if (picklistValue.IndexOf("~") >= 0) { lookupDisplay = picklistValue.Substring(0, picklistValue.IndexOf("~")); reason = picklistValue.Substring(picklistValue.IndexOf("~") + 1); } else { lookupDisplay = picklistValue; } if (lookupDisplay != "") { ArrayList pickListValues = xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceLookup), "categoryId,display", field.lookupCategory + "," + lookupDisplay); if (pickListValues.Count > 0) { foreach (oSurfaceLookup look in pickListValues) { insertBuilder.AppendLine("," + look.recId); } } else { oSurfaceLookup lookAdd = new oSurfaceLookup(); lookAdd.categoryId = field.lookupCategory; lookAdd.display = lookupDisplay; lookAdd.isActive = true; lookAdd.sequence = 1; lookAdd.recId = xData.SaveTyped("recId", typeof(oSurfaceLookup), lookAdd); if (lookAdd.recId > 0) { insertBuilder.AppendLine("," + lookAdd.recId); } } } } } break; case pNums.FieldType.RadioButtonList: if (field.isCustomSource) { string picklistValue = drow[column.ColumnName].ToString(); string fieldSelect = String.Empty; String[] flds = field.relationalFields.Split(char.Parse(",")); foreach (string f in flds) { if (fieldSelect == String.Empty) fieldSelect = f; else fieldSelect += " + ' ' + " + f; } if (field.relationalObject != String.Empty) { bool userService = field.relationalObject == "pal_User" ? true : false; string query = "Select " + field.relationalValues + " AS Value FROM " + field.relationalObject + " WHERE (" + fieldSelect + ") = '" + picklistValue + "' "; if (field.relationalObject == "pal_User") query += "AND customerCode = " + handler.ReturnSetup().code; DataTable pickData = xData.GetCustomTypedTable(query, userService); if (pickData.Rows.Count > 0) { insertBuilder.AppendLine(",'" + pickData.Rows[0][0].ToString().Replace("'", "''") + "'"); } else { insertBuilder.AppendLine(",''"); } } } else { //CVH lookupDisplay~reason string radioValue = drow[column.ColumnName].ToString(); if (radioValue != null && radioValue.Trim() != String.Empty) { string lookupDisplay = ""; string reason = ""; if (radioValue.IndexOf("~") >= 0) { lookupDisplay = radioValue.Substring(0, radioValue.IndexOf("~")); reason = radioValue.Substring(radioValue.IndexOf("~") + 1); } else { lookupDisplay = radioValue; } if (lookupDisplay != "") { ArrayList radioListValues = xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceLookup), "categoryId,display", field.lookupCategory + "," + lookupDisplay); if (radioListValues.Count > 0) { foreach (oSurfaceLookup look in radioListValues) { insertBuilder.AppendLine("," + look.recId); } } else { oSurfaceLookup lookAdd = new oSurfaceLookup(); lookAdd.categoryId = field.lookupCategory; lookAdd.display = lookupDisplay; lookAdd.isActive = true; lookAdd.sequence = 1; lookAdd.recId = xData.SaveTyped("recId", typeof(oSurfaceLookup), lookAdd); if (lookAdd.recId > 0) { insertBuilder.AppendLine("," + lookAdd.recId); } } } } } break; case pNums.FieldType.CheckboxList: if (field.isCustomSource) { string picklistValue = drow[column.ColumnName].ToString(); string fieldSelect = String.Empty; String[] flds = field.relationalFields.Split(char.Parse(",")); foreach (string f in flds) { if (fieldSelect == String.Empty) fieldSelect = f; else fieldSelect += " + ' ' + " + f; } if (field.relationalObject != String.Empty) { bool userService = field.relationalObject == "pal_User" ? true : false; string query = "Select " + field.relationalValues + " AS Value FROM " + field.relationalObject + " WHERE (" + fieldSelect + ") = '" + picklistValue + "' "; if (field.relationalObject == "pal_User") query += "AND customerCode = " + handler.ReturnSetup().code; DataTable pickData = xData.GetCustomTypedTable(query, userService); if (pickData.Rows.Count > 0) { insertBuilder.AppendLine(",'" + pickData.Rows[0][0].ToString().Replace("'", "''") + "'"); } else { insertBuilder.AppendLine(",''"); } } } else { //CVH lookupDisplay~reason|lookupDisplay~reason Save as lookupId~R~Reason~|~ string checkValue = drow[column.ColumnName].ToString(); string vals = ""; if (checkValue != null && checkValue.Trim() != String.Empty) { foreach (string value in checkValue.Split('|')) { string lookupDisplay = ""; string reason = ""; if (value.IndexOf("~") >= 0) { lookupDisplay = value.Substring(0, value.IndexOf("~")); reason = value.Substring(value.IndexOf("~") + 1); } else { lookupDisplay = value; } if (lookupDisplay != "") { ArrayList checkListValues = xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceLookup), "categoryId,display", field.lookupCategory + "," + lookupDisplay); if (checkListValues.Count > 0) { foreach (oSurfaceLookup look in checkListValues) { vals += look.recId.ToString() + "~R~" + reason + "~|~"; } } else { oSurfaceLookup lookAdd = new oSurfaceLookup(); lookAdd.categoryId = field.lookupCategory; lookAdd.display = lookupDisplay; lookAdd.isActive = true; lookAdd.sequence = 1; lookAdd.recId = xData.SaveTyped("recId", typeof(oSurfaceLookup), lookAdd); if (lookAdd.recId > 0) { vals += lookAdd.recId.ToString() + "~R~" + reason + "~|~"; } } } } } insertBuilder.AppendLine(",'" + vals.Replace("'", "''") + "'"); } break; case pNums.FieldType.MultiPicklist: string multiValue = drow[column.ColumnName].ToString(); string valsMulti = ""; if (multiValue != null && multiValue.Trim() != String.Empty) { foreach (string value in multiValue.Split('|')) { if (value != "") { ArrayList multiPicklistValues = xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceLookup), "categoryId,display", field.lookupCategory + "," + value); if (multiPicklistValues.Count > 0) { foreach (oSurfaceLookup look in multiPicklistValues) { if (valsMulti == "") valsMulti = look.recId.ToString(); else valsMulti += "," + look.recId.ToString(); } } else { oSurfaceLookup lookAdd = new oSurfaceLookup(); lookAdd.categoryId = field.lookupCategory; lookAdd.display = value; lookAdd.isActive = true; lookAdd.sequence = 1; lookAdd.recId = xData.SaveTyped("recId", typeof(oSurfaceLookup), lookAdd); if (lookAdd.recId > 0) { if (valsMulti == "") valsMulti = lookAdd.recId.ToString(); else valsMulti += "," + lookAdd.recId.ToString(); } } } } } insertBuilder.AppendLine(",'" + valsMulti.Replace("'", "''") + "'"); break; case pNums.FieldType.Address: //CVH Street,Suburb,City,Province,South Africa,Postal Code. Saved as ~1~Street~|~~2~Suburb~|~ etc. if (drow[column.ColumnName].ToString() != String.Empty) { string address = ""; int line = 1; foreach (string addressLine in drow[column.ColumnName].ToString().Split(',')) { address += "~" + line.ToString() + "~" + addressLine.Trim() + "~|~"; line++; } insertBuilder.AppendLine(",'" + address.Replace("'", "''") + "'"); } break; case pNums.FieldType.Caption://caption insertBuilder.AppendLine(",'" + drow[column.ColumnName].ToString() + "'"); break; case pNums.FieldType.FormulaField: decimal valueDecimal = 0; if (decimal.TryParse(drow[column.ColumnName].ToString(), out valueDecimal)) { insertBuilder.AppendLine("," + valueDecimal); } else //assume textbox { insertBuilder.AppendLine(",'" + drow[column.ColumnName].ToString().Replace("'", "''") + "'"); } break; } break; } } } } } insertBuilder.AppendLine(")"); //insert record xData.RunCustomQuery(insertBuilder.ToString()); } // } //}); } result = true; } catch (Exception ex) { exception.HandleException("surfaceHandler:", MethodBase.GetCurrentMethod().Name, ex, HttpContext.Current.Session["user"]); } return result; } /// /// build Surface Apps /// /// private static string BuildChildSurfaceApps(oSurface _surface) { string result = String.Empty; StringBuilder formBuilder = new StringBuilder(); try { ArrayList ChildAppNames = new ArrayList(); ArrayList ChildApps = new ArrayList(); //fetch child names ChildAppNames = xData.GetTypedByCriteriaDistinct("recId", typeof(oSurfaceField), "surfaceId,surfaceFieldTypeId", _surface.recId + "," + (int)pNums.FieldType.Grid, "relationalSurface", "relationalSurface"); foreach (oSurfaceField grdField in ChildAppNames) { string surfaceName = grdField.relationalSurface; if (surfaceName != String.Empty) { foreach (oSurface surf in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurface), "isActive,name", "1," + surfaceName)) { formBuilder.AppendLine(BuildChildSurfaceModal(surf)); } } } result = formBuilder.ToString(); } catch (Exception ex) { exception.HandleException("handler:", MethodBase.GetCurrentMethod().Name, ex, HttpContext.Current.Session["user"]); } return result; } /// /// Build Child Modal /// /// /// private static string BuildChildSurfaceModal(oSurface _surface) { string result = String.Empty; StringBuilder formBuilder = new StringBuilder(); try { formBuilder.AppendLine("<%@ Register Src=\"~/controls/surface/" + _surface.name + ".ascx\" TagPrefix=\"uc1\" TagName=\"ucSurface_" + _surface.name + "\" %>"); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine("

        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine(""); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); formBuilder.AppendLine("
        "); result = formBuilder.ToString(); } catch (Exception ex) { exception.HandleException("handler:", MethodBase.GetCurrentMethod().Name, ex, HttpContext.Current.Session["user"]); } return result; } /// /// Publish Surface App /// Create a Custom instance of the surface app /// /// /// public static bool PublishSurfaceApp(oSurface _surface, bool recreateCode = false) { bool result = false; try { ArrayList surfaceFields = xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceField), "surfaceId,isActive", _surface.recId + ",1", "sequence"); //Copy surface app control to custom folder *********************** bool isDevEnvironment = false; string customFolder = HttpContext.Current.Server.MapPath("~/controls/surface_custom/"); string customFolderBak = HttpContext.Current.Server.MapPath("~/controls/surface_custom_backup/"); string customPath = "~/controls/surface_custom/"; string customPathBak = "~/controls/surface_custom_backup/"; //validate the custom folder utils.validateFolder(customFolder); utils.validateFolder(customFolderBak); string templateControlGridFront = HttpContext.Current.Server.MapPath("~/controls/surface/" + _surface.name + "_grid.ascx"); string templateControlGridBack = HttpContext.Current.Server.MapPath("~/controls/surface/surface_grid.ascx.cs"); string templateControlFormFront = HttpContext.Current.Server.MapPath("~/controls/surface/" + _surface.name + "_form.ascx"); string templateControlFormBack = HttpContext.Current.Server.MapPath("~/controls/surface/surface_form.ascx.cs"); string templateControlViewFront = HttpContext.Current.Server.MapPath("~/controls/surface/" + _surface.name + "_view.ascx"); string templateControlViewBack = HttpContext.Current.Server.MapPath("~/controls/surface/surface_view.ascx.cs"); isDevEnvironment = File.Exists(templateControlGridBack); string appFrontGrid = utils.ConvertHTMLFiletoString(templateControlGridFront); string appFrontForm = utils.ConvertHTMLFiletoString(templateControlFormFront); string appFrontView = utils.ConvertHTMLFiletoString(templateControlViewFront); //build table CreateTableFromSurface(_surface, surfaceFields); if (isDevEnvironment) { //build object CreateObjectFromSurface(_surface); //save markup appFrontGrid = appFrontGrid.Replace("controls_surface_surface_grid", "controls_surface_custom_" + _surface.name + "_grid"); appFrontGrid = appFrontGrid.Replace("surface_grid.ascx.cs", _surface.name + "_grid.ascx.cs"); utils.ConvertStringtoHTMLFile(appFrontGrid, HttpContext.Current.Server.MapPath(customPath + _surface.name + "_grid.ascx")); appFrontForm = appFrontForm.Replace("controls_surface_surface_form", "controls_surface_custom_" + _surface.name + "_form"); appFrontForm = appFrontForm.Replace("surface_form.ascx.cs", _surface.name + "_form.ascx.cs"); utils.ConvertStringtoHTMLFile(appFrontForm, HttpContext.Current.Server.MapPath(customPath + _surface.name + "_form.ascx")); appFrontView = appFrontView.Replace("controls_surface_surface_view", "controls_surface_custom_" + _surface.name + "_view"); appFrontView = appFrontView.Replace("surface_view.ascx.cs", _surface.name + "_view.ascx.cs"); utils.ConvertStringtoHTMLFile(appFrontView, HttpContext.Current.Server.MapPath(customPath + _surface.name + "_view.ascx")); //handle backend custom string appBackGrid = utils.ConvertHTMLFiletoString(templateControlGridBack); appBackGrid = appBackGrid.Replace("controls_surface_surface_grid", "controls_surface_custom_" + _surface.name + "_grid"); string appBackForm = utils.ConvertHTMLFiletoString(templateControlFormBack); appBackForm = appBackForm.Replace("controls_surface_surface_form", "controls_surface_custom_" + _surface.name + "_form"); string appBackView = utils.ConvertHTMLFiletoString(templateControlViewBack); appBackView = appBackView.Replace("controls_surface_surface_view", "controls_surface_custom_" + _surface.name + "_view"); //build populate string popcode = String.Empty; BuildPopulateFormCode(ref popcode, _surface, surfaceFields, false); appBackForm = appBackForm.Replace("//-- {PopulateFormCustomValues} --//", popcode); string popviewcode = String.Empty; BuildPopulateFormCode(ref popviewcode, _surface, surfaceFields, true); appBackView = appBackView.Replace("//-- {PopulateViewCustomValues} --//", popviewcode); //build save string savcode = String.Empty; BuildSaveFormCode(ref savcode, _surface, surfaceFields); appBackForm = appBackForm.Replace("//-- {SaveFormCustomValues} --//", savcode); //only save if file doesnt alrteady exist if (!File.Exists(HttpContext.Current.Server.MapPath(customPath + _surface.name + "_grid.ascx.cs"))) { utils.ConvertStringtoHTMLFile(appBackGrid, HttpContext.Current.Server.MapPath(customPath + _surface.name + "_grid.ascx.cs")); } else if (recreateCode) { //backup previous control first File.Move(HttpContext.Current.Server.MapPath(customPath + _surface.name + "_grid.ascx.cs"), HttpContext.Current.Server.MapPath(customPathBak + _surface.name + "_grid" + DateTime.Now.ToString("yyyy-MM-dd-HH-mm") + ".ascx.cs.exclude")); //then recreate utils.ConvertStringtoHTMLFile(appBackGrid, HttpContext.Current.Server.MapPath(customPath + _surface.name + "_grid.ascx.cs")); } if (!File.Exists(HttpContext.Current.Server.MapPath(customPath + _surface.name + "_form.ascx.cs"))) { utils.ConvertStringtoHTMLFile(appBackForm, HttpContext.Current.Server.MapPath(customPath + _surface.name + "_form.ascx.cs")); } else if (recreateCode) { //backup previous control first File.Move(HttpContext.Current.Server.MapPath(customPath + _surface.name + "_form.ascx.cs"), HttpContext.Current.Server.MapPath(customPathBak + _surface.name + "_form" + DateTime.Now.ToString("yyyy-MM-dd-HH-mm") + ".ascx.cs.exclude")); //then recreate utils.ConvertStringtoHTMLFile(appBackForm, HttpContext.Current.Server.MapPath(customPath + _surface.name + "_form.ascx.cs")); } if (!File.Exists(HttpContext.Current.Server.MapPath(customPath + _surface.name + "_view.ascx.cs"))) { utils.ConvertStringtoHTMLFile(appBackView, HttpContext.Current.Server.MapPath(customPath + _surface.name + "_view.ascx.cs")); } else if (recreateCode) { //backup previous control first File.Move(HttpContext.Current.Server.MapPath(customPath + _surface.name + "_view.ascx.cs"), HttpContext.Current.Server.MapPath(customPathBak + _surface.name + "_view" + DateTime.Now.ToString("yyyy-MM-dd-HH-mm") + ".ascx.cs.exclude")); //then recreate utils.ConvertStringtoHTMLFile(appBackView, HttpContext.Current.Server.MapPath(customPath + _surface.name + "_view.ascx.cs")); } } else //live so only apply front end markup { appFrontGrid = appFrontGrid.Replace("controls_surface_surface_grid, controls.surface", "controls_surface_custom_" + _surface.name + "_grid, controls.surface_custom"); utils.ConvertStringtoHTMLFile(appFrontGrid, HttpContext.Current.Server.MapPath(customPath + _surface.name + "_grid.ascx")); appFrontForm = appFrontForm.Replace("controls_surface_surface_form, controls.surface", "controls_surface_custom_" + _surface.name + "_form, controls.surface_custom"); utils.ConvertStringtoHTMLFile(appFrontForm, HttpContext.Current.Server.MapPath(customPath + _surface.name + "_form.ascx")); appFrontView = appFrontView.Replace("controls_surface_surface_view, controls.surface", "controls_surface_custom_" + _surface.name + "_view, controls.surface_custom"); utils.ConvertStringtoHTMLFile(appFrontView, HttpContext.Current.Server.MapPath(customPath + _surface.name + "_view.ascx")); } //import the data to custom table ImportPublishedSurfaceDataToTable(_surface, surfaceFields); result = true; } catch (Exception ex) { exception.HandleException("surfaceHandler:", MethodBase.GetCurrentMethod().Name, ex, HttpContext.Current.Session["user"]); } return result; } /// /// Create Table from surfac eapp /// /// private static bool CreateTableFromSurface(oSurface _surface, ArrayList surfaceFields) { bool result = false; try { StringBuilder ScriptBuild = new StringBuilder(); ScriptBuild.AppendLine("IF (NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'publ_" + _surface.name + "')) "); ScriptBuild.AppendLine("BEGIN "); ScriptBuild.AppendLine("CREATE TABLE [dbo].[publ_" + _surface.name + "]( "); ScriptBuild.AppendLine("[itemID] [int] NOT NULL, [isActive] [bit] NULL, [surfaceId] [int] NOT NULL, "); foreach (oSurfaceField field in surfaceFields) { if (!field.surfaceFieldName.StartsWith("_")) { string length = "max"; if (field.length > 0) { length = field.length.ToString(); } pNums.FieldType typ = (pNums.FieldType)Enum.ToObject(typeof(pNums.FieldType), field.surfaceFieldTypeId); switch (typ) { #region Label case pNums.FieldType.Label: ScriptBuild.AppendLine("[" + field.surfaceFieldName + "] [varchar](" + length + ") NULL, "); break; #endregion #region Text case pNums.FieldType.Text: ScriptBuild.AppendLine("[" + field.surfaceFieldName + "] [varchar](" + length + ") NULL, "); break; #endregion #region Number case pNums.FieldType.Number: ScriptBuild.AppendLine("[" + field.surfaceFieldName + "] [int] NULL, "); break; #endregion #region Decimal case pNums.FieldType.Decimal: ScriptBuild.AppendLine("[" + field.surfaceFieldName + "] [decimal](18,2) NULL, "); break; #endregion #region Picklist case pNums.FieldType.Picklist: if (field.isCustomSource) { ScriptBuild.AppendLine("[" + field.surfaceFieldName + "] [varchar](" + length + ") NULL, "); } else if (field.relationalObject.Length > 0 && field.relationalObject != "0") { ScriptBuild.AppendLine("[" + field.surfaceFieldName + "] [varchar](" + length + ") NULL, "); } else { ScriptBuild.AppendLine("[" + field.surfaceFieldName + "] [int] NULL, "); } break; #endregion #region MultiPicklist case pNums.FieldType.MultiPicklist: ScriptBuild.AppendLine("[" + field.surfaceFieldName + "] [varchar](" + length + ") NULL, "); break; #endregion #region Date case pNums.FieldType.Date: ScriptBuild.AppendLine("[" + field.surfaceFieldName + "] [datetime] NULL, "); break; #endregion #region Time case pNums.FieldType.Time: ScriptBuild.AppendLine("[" + field.surfaceFieldName + "] [datetime] NULL, "); break; #endregion #region Checkbox case pNums.FieldType.Checkbox: ScriptBuild.AppendLine("[" + field.surfaceFieldName + "] [bit] NULL, "); break; #endregion #region RadioButtonList case pNums.FieldType.RadioButtonList: if (field.isCustomSource) { ScriptBuild.AppendLine("[" + field.surfaceFieldName + "] [varchar](" + length + ") NULL, "); } else if (field.relationalObject.Length > 0 && field.relationalObject != "0") { ScriptBuild.AppendLine("[" + field.surfaceFieldName + "] [varchar](" + length + ") NULL, "); } else { ScriptBuild.AppendLine("[" + field.surfaceFieldName + "] [int] NULL, "); } break; #endregion #region Caption case pNums.FieldType.Caption: ScriptBuild.AppendLine("[" + field.surfaceFieldName + "] [text] NULL, "); break; #endregion //#region Content //case pNums.FieldType.Content: // ScriptBuild.AppendLine("[" + field.surfaceFieldName + "] [int] NULL, "); // break; //#endregion #region FormulaField case pNums.FieldType.FormulaField: ScriptBuild.AppendLine("[" + field.surfaceFieldName + "] [decimal](18,2) NULL, "); break; #endregion #region Address case pNums.FieldType.Address: ScriptBuild.AppendLine("[" + field.surfaceFieldName + "] [varchar](" + length + ") NULL, "); break; #endregion #region CheckboxList case pNums.FieldType.CheckboxList: ScriptBuild.AppendLine("[" + field.surfaceFieldName + "] [varchar](" + length + ") NULL, "); break; #endregion #region Image case pNums.FieldType.Image: ScriptBuild.AppendLine("[" + field.surfaceFieldName + "] [varchar](" + length + ") NULL, "); break; #endregion #region Image case pNums.FieldType.Attachment: ScriptBuild.AppendLine("[" + field.surfaceFieldName + "] [varchar](" + length + ") NULL, "); break; #endregion #region Button case pNums.FieldType.Button: ScriptBuild.AppendLine("[" + field.surfaceFieldName + "] [varchar](" + length + ") NULL, "); break; #endregion #region Note case pNums.FieldType.Note: ScriptBuild.AppendLine("[" + field.surfaceFieldName + "] [varchar](" + length + ") NULL, "); break; #endregion #region Control case pNums.FieldType.Control: ScriptBuild.AppendLine("[" + field.surfaceFieldName + "] [varchar](" + length + ") NULL, "); break; #endregion #region Debtors case pNums.FieldType.Debtors: ScriptBuild.AppendLine("[" + field.surfaceFieldName + "] [varchar](" + length + ") NULL, "); break; #endregion #region Sales case pNums.FieldType.Sales: ScriptBuild.AppendLine("[" + field.surfaceFieldName + "] [varchar](" + length + ") NULL, "); break; #endregion #region BarcodeScanner case pNums.FieldType.BarcodeScanner: ScriptBuild.AppendLine("[" + field.surfaceFieldName + "] [varchar](" + length + ") NULL, "); break; #endregion } } } ScriptBuild.AppendLine("[recId] [int] IDENTITY(1,1) NOT NULL, "); ScriptBuild.AppendLine("PRIMARY KEY CLUSTERED "); ScriptBuild.AppendLine("([recId] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] "); ScriptBuild.AppendLine("END"); ScriptBuild.AppendLine("ELSE"); ScriptBuild.AppendLine("BEGIN "); foreach (oSurfaceField field in surfaceFields) { if (!field.surfaceFieldName.StartsWith("_")) { string length = "max"; if (field.length > 0) { length = field.length.ToString(); } pNums.FieldType typ = (pNums.FieldType)Enum.ToObject(typeof(pNums.FieldType), field.surfaceFieldTypeId); switch (typ) { #region Label case pNums.FieldType.Label: ScriptBuild.AppendLine("IF NOT EXISTS( SELECT * FROM sys.columns WHERE Name = N'" + field.surfaceFieldName + "' AND Object_ID = Object_ID(N'publ_" + _surface.name + "'))"); ScriptBuild.AppendLine("BEGIN "); ScriptBuild.AppendLine("ALTER TABLE publ_" + _surface.name + " "); ScriptBuild.AppendLine("ADD " + field.surfaceFieldName + " varchar(" + length + ") NULL; "); ScriptBuild.AppendLine("END"); break; #endregion #region Text case pNums.FieldType.Text: ScriptBuild.AppendLine("IF NOT EXISTS( SELECT * FROM sys.columns WHERE Name = N'" + field.surfaceFieldName + "' AND Object_ID = Object_ID(N'publ_" + _surface.name + "'))"); ScriptBuild.AppendLine("BEGIN "); ScriptBuild.AppendLine("ALTER TABLE publ_" + _surface.name + " "); ScriptBuild.AppendLine("ADD " + field.surfaceFieldName + " varchar(" + length + ") NULL; "); ScriptBuild.AppendLine("END"); break; #endregion #region Number case pNums.FieldType.Number: ScriptBuild.AppendLine("IF NOT EXISTS( SELECT * FROM sys.columns WHERE Name = N'" + field.surfaceFieldName + "' AND Object_ID = Object_ID(N'publ_" + _surface.name + "'))"); ScriptBuild.AppendLine("BEGIN "); ScriptBuild.AppendLine("ALTER TABLE publ_" + _surface.name + " "); ScriptBuild.AppendLine("ADD " + field.surfaceFieldName + " int NULL; "); ScriptBuild.AppendLine("END"); break; #endregion #region Decimal case pNums.FieldType.Decimal: ScriptBuild.AppendLine("IF NOT EXISTS( SELECT * FROM sys.columns WHERE Name = N'" + field.surfaceFieldName + "' AND Object_ID = Object_ID(N'publ_" + _surface.name + "'))"); ScriptBuild.AppendLine("BEGIN "); ScriptBuild.AppendLine("ALTER TABLE publ_" + _surface.name + " "); ScriptBuild.AppendLine("ADD " + field.surfaceFieldName + " decimal(18,2) NULL; "); ScriptBuild.AppendLine("END"); break; #endregion #region Picklist case pNums.FieldType.Picklist: ScriptBuild.AppendLine("IF NOT EXISTS( SELECT * FROM sys.columns WHERE Name = N'" + field.surfaceFieldName + "' AND Object_ID = Object_ID(N'publ_" + _surface.name + "'))"); ScriptBuild.AppendLine("BEGIN "); ScriptBuild.AppendLine("ALTER TABLE publ_" + _surface.name + " "); if (field.isCustomSource) { ScriptBuild.AppendLine("ADD " + field.surfaceFieldName + " varchar(" + length + ") NULL; "); } else if (field.relationalObject.Length > 0 && field.relationalObject != "0") { ScriptBuild.AppendLine("ADD " + field.surfaceFieldName + " varchar(" + length + ") NULL; "); } else { ScriptBuild.AppendLine("ADD " + field.surfaceFieldName + " int NULL; "); } ScriptBuild.AppendLine("END"); break; #endregion #region MultiPicklist case pNums.FieldType.MultiPicklist: ScriptBuild.AppendLine("IF NOT EXISTS( SELECT * FROM sys.columns WHERE Name = N'" + field.surfaceFieldName + "' AND Object_ID = Object_ID(N'publ_" + _surface.name + "'))"); ScriptBuild.AppendLine("BEGIN "); ScriptBuild.AppendLine("ALTER TABLE publ_" + _surface.name + " "); ScriptBuild.AppendLine("ADD " + field.surfaceFieldName + " varchar(" + length + ") NULL; "); ScriptBuild.AppendLine("END"); break; #endregion #region Date case pNums.FieldType.Date: ScriptBuild.AppendLine("IF NOT EXISTS( SELECT * FROM sys.columns WHERE Name = N'" + field.surfaceFieldName + "' AND Object_ID = Object_ID(N'publ_" + _surface.name + "'))"); ScriptBuild.AppendLine("BEGIN "); ScriptBuild.AppendLine("ALTER TABLE publ_" + _surface.name + " "); ScriptBuild.AppendLine("ADD " + field.surfaceFieldName + " datetime NULL; "); ScriptBuild.AppendLine("END"); break; #endregion #region Time case pNums.FieldType.Time: ScriptBuild.AppendLine("IF NOT EXISTS( SELECT * FROM sys.columns WHERE Name = N'" + field.surfaceFieldName + "' AND Object_ID = Object_ID(N'publ_" + _surface.name + "'))"); ScriptBuild.AppendLine("BEGIN "); ScriptBuild.AppendLine("ALTER TABLE publ_" + _surface.name + " "); ScriptBuild.AppendLine("ADD " + field.surfaceFieldName + " datetime NULL; "); ScriptBuild.AppendLine("END"); break; #endregion #region Checkbox case pNums.FieldType.Checkbox: ScriptBuild.AppendLine("IF NOT EXISTS( SELECT * FROM sys.columns WHERE Name = N'" + field.surfaceFieldName + "' AND Object_ID = Object_ID(N'publ_" + _surface.name + "'))"); ScriptBuild.AppendLine("BEGIN "); ScriptBuild.AppendLine("ALTER TABLE publ_" + _surface.name + " "); ScriptBuild.AppendLine("ADD " + field.surfaceFieldName + " bit NULL; "); ScriptBuild.AppendLine("END"); break; #endregion #region RadioButtonList case pNums.FieldType.RadioButtonList: ScriptBuild.AppendLine("IF NOT EXISTS( SELECT * FROM sys.columns WHERE Name = N'" + field.surfaceFieldName + "' AND Object_ID = Object_ID(N'publ_" + _surface.name + "'))"); ScriptBuild.AppendLine("BEGIN "); ScriptBuild.AppendLine("ALTER TABLE publ_" + _surface.name + " "); if (field.isCustomSource) { ScriptBuild.AppendLine("ADD " + field.surfaceFieldName + " varchar(" + length + ") NULL; "); } else if (field.relationalObject.Length > 0 && field.relationalObject != "0") { ScriptBuild.AppendLine("ADD " + field.surfaceFieldName + " varchar(" + length + ") NULL; "); } else { ScriptBuild.AppendLine("ADD " + field.surfaceFieldName + " int NULL; "); } ScriptBuild.AppendLine("END"); break; #endregion #region Caption case pNums.FieldType.Caption: ScriptBuild.AppendLine("IF NOT EXISTS( SELECT * FROM sys.columns WHERE Name = N'" + field.surfaceFieldName + "' AND Object_ID = Object_ID(N'publ_" + _surface.name + "'))"); ScriptBuild.AppendLine("BEGIN "); ScriptBuild.AppendLine("ALTER TABLE publ_" + _surface.name + " "); ScriptBuild.AppendLine("ADD " + field.surfaceFieldName + " text NULL; "); ScriptBuild.AppendLine("END"); break; #endregion #region FormulaField case pNums.FieldType.FormulaField: ScriptBuild.AppendLine("IF NOT EXISTS( SELECT * FROM sys.columns WHERE Name = N'" + field.surfaceFieldName + "' AND Object_ID = Object_ID(N'publ_" + _surface.name + "'))"); ScriptBuild.AppendLine("BEGIN "); ScriptBuild.AppendLine("ALTER TABLE publ_" + _surface.name + " "); ScriptBuild.AppendLine("ADD " + field.surfaceFieldName + " decimal(18,2) NULL; "); ScriptBuild.AppendLine("END"); break; #endregion #region Address case pNums.FieldType.Address: ScriptBuild.AppendLine("IF NOT EXISTS( SELECT * FROM sys.columns WHERE Name = N'" + field.surfaceFieldName + "' AND Object_ID = Object_ID(N'publ_" + _surface.name + "'))"); ScriptBuild.AppendLine("BEGIN "); ScriptBuild.AppendLine("ALTER TABLE publ_" + _surface.name + " "); ScriptBuild.AppendLine("ADD " + field.surfaceFieldName + " varchar(" + length + ") NULL; "); ScriptBuild.AppendLine("END"); break; #endregion #region CheckboxList case pNums.FieldType.CheckboxList: ScriptBuild.AppendLine("IF NOT EXISTS( SELECT * FROM sys.columns WHERE Name = N'" + field.surfaceFieldName + "' AND Object_ID = Object_ID(N'publ_" + _surface.name + "'))"); ScriptBuild.AppendLine("BEGIN "); ScriptBuild.AppendLine("ALTER TABLE publ_" + _surface.name + " "); ScriptBuild.AppendLine("ADD " + field.surfaceFieldName + " varchar(" + length + ") NULL; "); ScriptBuild.AppendLine("END"); break; #endregion #region Image case pNums.FieldType.Image: ScriptBuild.AppendLine("IF NOT EXISTS( SELECT * FROM sys.columns WHERE Name = N'" + field.surfaceFieldName + "' AND Object_ID = Object_ID(N'publ_" + _surface.name + "'))"); ScriptBuild.AppendLine("BEGIN "); ScriptBuild.AppendLine("ALTER TABLE publ_" + _surface.name + " "); ScriptBuild.AppendLine("ADD " + field.surfaceFieldName + " varchar(" + length + ") NULL; "); ScriptBuild.AppendLine("END"); break; #endregion #region Image case pNums.FieldType.Attachment: ScriptBuild.AppendLine("IF NOT EXISTS( SELECT * FROM sys.columns WHERE Name = N'" + field.surfaceFieldName + "' AND Object_ID = Object_ID(N'publ_" + _surface.name + "'))"); ScriptBuild.AppendLine("BEGIN "); ScriptBuild.AppendLine("ALTER TABLE publ_" + _surface.name + " "); ScriptBuild.AppendLine("ADD " + field.surfaceFieldName + " varchar(" + length + ") NULL; "); ScriptBuild.AppendLine("END"); break; #endregion #region Button case pNums.FieldType.Button: ScriptBuild.AppendLine("IF NOT EXISTS( SELECT * FROM sys.columns WHERE Name = N'" + field.surfaceFieldName + "' AND Object_ID = Object_ID(N'publ_" + _surface.name + "'))"); ScriptBuild.AppendLine("BEGIN "); ScriptBuild.AppendLine("ALTER TABLE publ_" + _surface.name + " "); ScriptBuild.AppendLine("ADD " + field.surfaceFieldName + " varchar(" + length + ") NULL; "); ScriptBuild.AppendLine("END"); break; #endregion #region Note case pNums.FieldType.Note: ScriptBuild.AppendLine("IF NOT EXISTS( SELECT * FROM sys.columns WHERE Name = N'" + field.surfaceFieldName + "' AND Object_ID = Object_ID(N'publ_" + _surface.name + "'))"); ScriptBuild.AppendLine("BEGIN "); ScriptBuild.AppendLine("ALTER TABLE publ_" + _surface.name + " "); ScriptBuild.AppendLine("ADD " + field.surfaceFieldName + " varchar(" + length + ") NULL; "); ScriptBuild.AppendLine("END"); break; #endregion #region Control case pNums.FieldType.Control: ScriptBuild.AppendLine("IF NOT EXISTS( SELECT * FROM sys.columns WHERE Name = N'" + field.surfaceFieldName + "' AND Object_ID = Object_ID(N'publ_" + _surface.name + "'))"); ScriptBuild.AppendLine("BEGIN "); ScriptBuild.AppendLine("ALTER TABLE publ_" + _surface.name + " "); ScriptBuild.AppendLine("ADD " + field.surfaceFieldName + " varchar(" + length + ") NULL; "); ScriptBuild.AppendLine("END"); break; #endregion #region Debtors case pNums.FieldType.Debtors: ScriptBuild.AppendLine("IF NOT EXISTS( SELECT * FROM sys.columns WHERE Name = N'" + field.surfaceFieldName + "' AND Object_ID = Object_ID(N'publ_" + _surface.name + "'))"); ScriptBuild.AppendLine("BEGIN "); ScriptBuild.AppendLine("ALTER TABLE publ_" + _surface.name + " "); ScriptBuild.AppendLine("ADD " + field.surfaceFieldName + " varchar(" + length + ") NULL; "); ScriptBuild.AppendLine("END"); break; #endregion #region Sales case pNums.FieldType.Sales: ScriptBuild.AppendLine("IF NOT EXISTS( SELECT * FROM sys.columns WHERE Name = N'" + field.surfaceFieldName + "' AND Object_ID = Object_ID(N'publ_" + _surface.name + "'))"); ScriptBuild.AppendLine("BEGIN "); ScriptBuild.AppendLine("ALTER TABLE publ_" + _surface.name + " "); ScriptBuild.AppendLine("ADD " + field.surfaceFieldName + " varchar(" + length + ") NULL; "); ScriptBuild.AppendLine("END"); break; #endregion #region BarcodeScanner case pNums.FieldType.BarcodeScanner: ScriptBuild.AppendLine("IF NOT EXISTS( SELECT * FROM sys.columns WHERE Name = N'" + field.surfaceFieldName + "' AND Object_ID = Object_ID(N'publ_" + _surface.name + "'))"); ScriptBuild.AppendLine("BEGIN "); ScriptBuild.AppendLine("ALTER TABLE publ_" + _surface.name + " "); ScriptBuild.AppendLine("ADD " + field.surfaceFieldName + " varchar(" + length + ") NULL; "); ScriptBuild.AppendLine("END"); break; #endregion } } } ScriptBuild.AppendLine("END"); result = xData.RunCustomQuery(ScriptBuild.ToString()); } catch (Exception ex) { exception.HandleException("surfaceHandler:", MethodBase.GetCurrentMethod().Name, ex, HttpContext.Current.Session["user"]); } return result; } /// /// Import data to Table from surface app /// /// private static bool ImportPublishedSurfaceDataToTable(oSurface _surface, ArrayList surfaceFields) { bool result = false; try { StringBuilder ScriptBuild = new StringBuilder(); ScriptBuild.AppendLine("DECLARE @Count As int "); ScriptBuild.AppendLine("SET @Count = (SELECT Count(*) FROM publ_" + _surface.name + ") "); ScriptBuild.AppendLine("IF @Count = 0 "); ScriptBuild.AppendLine("BEGIN "); ScriptBuild.AppendLine("INSERT INTO [dbo].[publ_" + _surface.name + "] ( "); ScriptBuild.AppendLine("[itemID] ,[isActive] ,[surfaceId] "); //CVH 2019-02-04 Add Label as field type foreach (oSurfaceField field in surfaceFields) { if (!field.surfaceFieldName.StartsWith("_")) { pNums.FieldType typ = (pNums.FieldType)Enum.ToObject(typeof(pNums.FieldType), field.surfaceFieldTypeId); switch (typ) { #region Text case pNums.FieldType.Text: ScriptBuild.AppendLine(",[" + field.surfaceFieldName + "]"); break; #endregion #region Number case pNums.FieldType.Number: ScriptBuild.AppendLine(",[" + field.surfaceFieldName + "]"); break; #endregion #region Decimal case pNums.FieldType.Decimal: ScriptBuild.AppendLine(",[" + field.surfaceFieldName + "]"); break; #endregion #region Picklist case pNums.FieldType.Picklist: ScriptBuild.AppendLine(",[" + field.surfaceFieldName + "]"); break; #endregion #region MultiPicklist case pNums.FieldType.MultiPicklist: ScriptBuild.AppendLine(",[" + field.surfaceFieldName + "]"); break; #endregion #region Date case pNums.FieldType.Date: ScriptBuild.AppendLine(",[" + field.surfaceFieldName + "]"); break; #endregion #region Time case pNums.FieldType.Time: ScriptBuild.AppendLine(",[" + field.surfaceFieldName + "]"); break; #endregion #region Checkbox case pNums.FieldType.Checkbox: ScriptBuild.AppendLine(",[" + field.surfaceFieldName + "]"); break; #endregion #region RadioButtonList case pNums.FieldType.RadioButtonList: ScriptBuild.AppendLine(",[" + field.surfaceFieldName + "]"); break; #endregion #region Caption case pNums.FieldType.Caption: ScriptBuild.AppendLine(",[" + field.surfaceFieldName + "]"); break; #endregion //#region Content //case pNums.FieldType.Content: // ScriptBuild.AppendLine(",[" + field.surfaceFieldName + "]"); // break; //#endregion #region FormulaField case pNums.FieldType.FormulaField: ScriptBuild.AppendLine(",[" + field.surfaceFieldName + "]"); break; #endregion #region Address case pNums.FieldType.Address: ScriptBuild.AppendLine(",[" + field.surfaceFieldName + "]"); break; #endregion #region CheckboxList case pNums.FieldType.CheckboxList: ScriptBuild.AppendLine(",[" + field.surfaceFieldName + "]"); break; #endregion #region Image case pNums.FieldType.Image: ScriptBuild.AppendLine(",[" + field.surfaceFieldName + "]"); break; #endregion #region Label case pNums.FieldType.Label: ScriptBuild.AppendLine(",[" + field.surfaceFieldName + "]"); break; #endregion #region BarcodeScanner case pNums.FieldType.BarcodeScanner: ScriptBuild.AppendLine(",[" + field.surfaceFieldName + "]"); break; #endregion } } } ScriptBuild.AppendLine(") SELECT [itemID] ,[isActive] ,[surfaceId] "); foreach (oSurfaceField field in surfaceFields) { if (!field.surfaceFieldName.StartsWith("_")) { pNums.FieldType typ = (pNums.FieldType)Enum.ToObject(typeof(pNums.FieldType), field.surfaceFieldTypeId); switch (typ) { #region Text case pNums.FieldType.Text: ScriptBuild.AppendLine(",[" + field.surfaceFieldName + "]"); break; #endregion #region Number case pNums.FieldType.Number: ScriptBuild.AppendLine(",ISNULL(NullIF([" + field.surfaceFieldName + "],''),0)"); break; #endregion #region Decimal case pNums.FieldType.Decimal: ScriptBuild.AppendLine(",ISNULL(NullIF([" + field.surfaceFieldName + "],''),0)"); break; #endregion #region Picklist case pNums.FieldType.Picklist: if (field.isCustomSource) { if (field.relationalObject != String.Empty) ScriptBuild.AppendLine(", (SELECT Top 1 " + field.relationalValues + " FROM " + field.relationalObject + " WHERE " + field.relationalValues + " = [" + field.surfaceFieldName + "])"); } else if (field.relationalObject.Length > 0 && field.relationalObject == "oSurface") { ScriptBuild.AppendLine(",[" + field.surfaceFieldName + "]"); } else if (field.relationalObject.Length > 0 && field.relationalObject != "0") { string valueField = string.Empty; string displayField = string.Empty; DataTable dtModule = xData.GetTypedByCriteriaSpecificTable("recId", typeof(oModule), "objectName", field.relationalObject); foreach (DataRow row in dtModule.Rows) { valueField = row["valueField"].ToString(); displayField = row["displayField"].ToString(); } //CVH 2019-02-04 Getting exceptions here when User lookup if (field.relationalObject == "oUser") ScriptBuild.AppendLine(", (SELECT Top 1 " + valueField + " FROM pal_vUserShared WHERE userDisplay = [" + field.surfaceFieldName + "])"); else ScriptBuild.AppendLine(", (SELECT Top 1 " + valueField + " FROM pal_" + field.relationalObject.Substring(1) + " WHERE " + valueField + " = [" + field.surfaceFieldName + "])"); } else { ScriptBuild.AppendLine(", (SELECT Top 1 recId FROM pal_SurfaceLookup WHERE categoryId = " + field.lookupCategory + " AND display = [" + field.surfaceFieldName + "])"); } break; #endregion #region MultiPicklist case pNums.FieldType.MultiPicklist: if (field.isCustomSource) { if (field.relationalObject != String.Empty) { string fieldName = String.Empty; String[] flds = field.relationalFields.Split(char.Parse(",")); foreach (string f in flds) { if (fieldName == String.Empty) fieldName = f; else fieldName += " + ' ' + " + f; } ScriptBuild.AppendLine(",STUFF((SELECT ',' + CAST(" + field.relationalValues + " AS VARCHAR(MAX)) FROM " + field.relationalObject + " CROSS APPLY(SELECT splitdata FROM dbo.SplitString((REPLACE([" + field.surfaceFieldName + "], '; ', ';')), ';')) X WHERE " + fieldName + " IN(Replace(X.splitdata, '&', '&')) FOR XML PATH('')), 1, 1, '')"); } } else ScriptBuild.AppendLine(",STUFF((SELECT ',' + CAST(recId AS VARCHAR(MAX)) FROM pal_SurfaceLookup L CROSS APPLY(SELECT splitdata FROM dbo.SplitString((REPLACE([" + field.surfaceFieldName + "], '; ', ';')), ';')) X WHERE display IN(Replace(X.splitdata, '&', '&')) AND categoryId = " + field.lookupCategory + " FOR XML PATH('')), 1, 1, '')"); break; #endregion #region Date case pNums.FieldType.Date: ScriptBuild.AppendLine(",ISNULL(NullIF([" + field.surfaceFieldName + "],''),NULL)"); break; #endregion #region Time case pNums.FieldType.Time: ScriptBuild.AppendLine(",ISNULL(NullIF([" + field.surfaceFieldName + "],''),NULL)"); break; #endregion #region Checkbox case pNums.FieldType.Checkbox: ScriptBuild.AppendLine(",[" + field.surfaceFieldName + "]"); break; #endregion #region RadioButtonList case pNums.FieldType.RadioButtonList: if (field.isCustomSource) { if (field.relationalObject != String.Empty) ScriptBuild.AppendLine(", (SELECT Top 1 " + field.relationalValues + " FROM " + field.relationalObject + " WHERE " + field.relationalValues + " = [" + field.surfaceFieldName + "])"); } else if (field.relationalObject.Length > 0 && field.relationalObject != "0") { string valueField = string.Empty; string displayField = string.Empty; DataTable dtModule = xData.GetTypedByCriteriaSpecificTable("recId", typeof(oModule), "objectName", field.relationalObject); foreach (DataRow row in dtModule.Rows) { valueField = row["valueField"].ToString(); displayField = row["displayField"].ToString(); } ScriptBuild.AppendLine(", (SELECT Top 1 " + valueField + " FROM pal_" + field.relationalObject.Substring(1) + " WHERE " + valueField + " = [" + field.surfaceFieldName + "])"); } else { ScriptBuild.AppendLine(", (SELECT Top 1 recId FROM pal_SurfaceLookup WHERE categoryId = " + field.lookupCategory + " AND display = [" + field.surfaceFieldName + "])"); } break; #endregion #region Caption case pNums.FieldType.Caption: ScriptBuild.AppendLine(",[" + field.surfaceFieldName + "]"); break; #endregion //#region Content //case pNums.FieldType.Content: // ScriptBuild.AppendLine(",ISNULL(NullIF([" + field.contentId + "],''),0)"); // break; //#endregion #region FormulaField case pNums.FieldType.FormulaField: ScriptBuild.AppendLine(",ISNULL(NullIF([" + field.surfaceFieldName + "],''),0)"); break; #endregion #region Address case pNums.FieldType.Address: ScriptBuild.AppendLine(",[" + field.surfaceFieldName + "]"); break; #endregion #region CheckboxList case pNums.FieldType.CheckboxList: if (field.isCustomSource) { if (field.relationalObject != String.Empty) { string fieldName = String.Empty; String[] flds = field.relationalFields.Split(char.Parse(",")); foreach (string f in flds) { if (fieldName == String.Empty) fieldName = f; else fieldName += " + ' ' + " + f; } ScriptBuild.AppendLine(",STUFF((SELECT ',' + CAST(" + field.relationalValues + " AS VARCHAR(MAX)) FROM " + field.relationalObject + " CROSS APPLY(SELECT splitdata FROM dbo.SplitString((REPLACE([" + field.surfaceFieldName + "], '; ', ';')), ';')) X WHERE " + fieldName + " IN(Replace(X.splitdata, '&', '&')) FOR XML PATH('')), 1, 1, '')"); } } else ScriptBuild.AppendLine(",STUFF((SELECT ',' + CAST(recId AS VARCHAR(MAX)) FROM pal_SurfaceLookup L CROSS APPLY(SELECT splitdata FROM dbo.SplitString((REPLACE([" + field.surfaceFieldName + "], ', ', ',')), ',')) X WHERE display IN(Replace(X.splitdata, '&', '&')) AND categoryId = " + field.lookupCategory + " FOR XML PATH('')), 1, 1, '')"); break; #endregion #region Image case pNums.FieldType.Image: ScriptBuild.AppendLine(",[" + field.surfaceFieldName + "]"); break; #endregion #region Label case pNums.FieldType.Label: ScriptBuild.AppendLine(",[" + field.surfaceFieldName + "]"); break; #endregion #region BarcodeScanner case pNums.FieldType.BarcodeScanner: ScriptBuild.AppendLine(",[" + field.surfaceFieldName + "]"); break; #endregion } } } ScriptBuild.AppendLine(" FROM qt_" + _surface.name + " "); ScriptBuild.AppendLine("END"); result = xData.RunCustomQuery(ScriptBuild.ToString()); } catch (Exception ex) { exception.HandleException("surfaceHandler:", MethodBase.GetCurrentMethod().Name, ex, HttpContext.Current.Session["user"]); } return result; } /// /// Method to produce the object output /// private static bool CreateObjectFromSurface(oSurface _surface) { ArrayList fieldList = new ArrayList(); string pathName = HttpContext.Current.Server.MapPath("~/App_Code/objects/"); string tableName = "publ_" + _surface.name; string objectName = "o" + _surface.name; FileInfo file = new FileInfo(pathName + objectName); bool result = false; try { utils.validateFolder(pathName); StreamWriter writer = new StreamWriter(pathName + objectName + ".cs", false); SqlCommand command = dataTier.CommandMethods.BeginSQLCommand(); fieldList = constructor.GetTableFields(tableName, ref command); //build result string writer.WriteLine("using System;"); writer.WriteLine("using System.Collections.Generic;"); writer.WriteLine("using System.Linq;"); writer.WriteLine("using System.Text;"); writer.WriteLine(); writer.WriteLine("[Serializable]"); writer.WriteLine("public class " + objectName); writer.WriteLine("{"); foreach (oTable table in fieldList) { string dataType = String.Empty; string dataResult = String.Empty; switch (table.dataType.ToLower()) { case "int": dataType = "int"; dataResult = "0"; break; case "bit": dataType = "bool"; dataResult = "false"; break; case "money": dataType = "decimal"; dataResult = "0"; break; case "decimal": dataType = "decimal"; dataResult = "0"; break; case "real": dataType = "double"; dataResult = "0"; break; case "float": dataType = "decimal"; dataResult = "0"; break; case "datetime": dataType = "DateTime"; dataResult = "DateTime.MinValue"; break; case "smalldatetime": dataType = "DateTime"; dataResult = "DateTime.MinValue"; break; case "numeric": dataType = "decimal"; dataResult = "0"; break; case "image": dataType = "Byte[]"; dataResult = "new Byte[] { Byte.MinValue }"; break; case "uniqueidentifier": dataType = "Guid"; dataResult = "Guid.NewGuid()"; break; default: dataType = "string"; dataResult = "String.Empty"; break; } writer.WriteLine("private " + dataType + " _" + table.fieldName + " = " + dataResult + ";"); writer.WriteLine(); writer.WriteLine("public " + dataType + " " + table.fieldName); writer.WriteLine("{"); writer.WriteLine("get {return this._" + table.fieldName + ";}"); writer.WriteLine("set {this._" + table.fieldName + " = value;}"); writer.WriteLine("}"); writer.WriteLine(); } writer.WriteLine("}"); //dispose writer writer.Close(); result = true; } catch (Exception ex) { exception.HandleException("surfaceHandler:", MethodBase.GetCurrentMethod().Name, ex, HttpContext.Current.Session["user"]); } return result; } /// /// Build Generated Code for populate /// /// /// private static void BuildPopulateFormCode(ref string generatedCode, oSurface _surface, ArrayList surfaceFields, bool isView) { try { string prefix = ""; if (isView) prefix = "lblv"; StringBuilder codeBuild = new StringBuilder(); StringBuilder labelBuild = new StringBuilder(); codeBuild.AppendLine("//instantiate object and fetch the data for it"); string objectName = "o" + _surface.name; codeBuild.AppendLine(objectName + " _obj = new " + objectName + "();"); codeBuild.AppendLine("foreach(" + objectName + " ob in xData.GetTypedByCriteriaSpecific(\"recId\", typeof(" + objectName + "), \"itemId\", _surfaceItem.recId.ToString(), \"\", \"publ_\"))"); codeBuild.AppendLine("{"); codeBuild.AppendLine("_obj = ob;"); codeBuild.AppendLine("break;"); codeBuild.AppendLine("}"); codeBuild.AppendLine("//cast object to entity"); codeBuild.AppendLine("base.Entity = _obj;"); foreach (oSurfaceField field in surfaceFields) { if (!field.surfaceFieldName.StartsWith("_")) { pNums.FieldType typ = (pNums.FieldType)Enum.ToObject(typeof(pNums.FieldType), field.surfaceFieldTypeId); switch (typ) { #region Label case pNums.FieldType.Label: if (!field.isLabelHidden && !field.isHidden) { if (field.surfaceId.ToString() == field.relationalSurface) { foreach (oSurfaceField lblField in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceField), "recId", field.relationalFields)) { codeBuild.AppendLine("// **** Label: " + field.surfaceFieldName + " *****"); if (lblField.surfaceFieldTypeId == (int)pNums.FieldType.Picklist || lblField.surfaceFieldTypeId == (int)pNums.FieldType.RadioButtonList) { if (lblField.isCustomSource) { if (lblField.relationalObject != String.Empty && lblField.relationalObject != "0") { string fieldSelect = String.Empty; String[] flds = lblField.relationalFields.Split(char.Parse(",")); foreach (string f in flds) { if (fieldSelect == String.Empty) fieldSelect = f; else fieldSelect += " + ' ' + " + f; } codeBuild.AppendLine("if (_obj." + lblField.surfaceFieldName + ".ToString() != String.Empty){"); codeBuild.AppendLine("string query = \"Select " + fieldSelect + " AS Display FROM " + lblField.relationalObject + " WHERE " + lblField.relationalValues + " = \" + _obj." + lblField.surfaceFieldName + ".ToString();"); codeBuild.AppendLine("DataTable dt" + lblField.surfaceFieldName + " = xData.GetCustomTypedTable(query);"); codeBuild.AppendLine("foreach(DataRow row in dt" + lblField.surfaceFieldName + ".Rows)"); codeBuild.AppendLine("{"); if (prefix != String.Empty) codeBuild.AppendLine(prefix + field.surfaceFieldName + "Value.Text = row[0].ToString();"); else codeBuild.AppendLine("lbl" + field.surfaceFieldName + "Value.Text = row[0].ToString();"); codeBuild.AppendLine("break;"); codeBuild.AppendLine("}"); codeBuild.AppendLine("}"); } } //CVH 2018-11-08 Fix else if (lblField.relationalObject.Length > 0 && lblField.relationalObject == "oSurface") { codeBuild.AppendLine("if (_obj." + lblField.surfaceFieldName + ".ToString() != String.Empty)"); if (prefix != String.Empty) codeBuild.AppendLine(prefix + field.surfaceFieldName + "Value.Text = _obj." + lblField.surfaceFieldName + ".ToString();"); else codeBuild.AppendLine("lbl" + field.surfaceFieldName + "Value.Text = _obj." + lblField.surfaceFieldName + ".ToString();"); } else if (lblField.relationalObject.Length > 0 && lblField.relationalObject != "0") { string valueField = string.Empty; string displayField = string.Empty; DataTable dtModule = xData.GetTypedByCriteriaSpecificTable("recId", typeof(oModule), "objectName", field.relationalObject); foreach (DataRow row in dtModule.Rows) { valueField = row["valueField"].ToString(); displayField = row["displayField"].ToString(); } codeBuild.AppendLine("foreach(" + field.relationalObject + " itm in xData.GetTypedByCriteriaSpecific(\"recId\", typeof(" + field.relationalObject + "), \"" + valueField + "\", \"_obj." + field.surfaceFieldName + ".ToString()\");"); codeBuild.AppendLine("{"); if (prefix != String.Empty) codeBuild.AppendLine(prefix + field.surfaceFieldName + "Value.Text = itm." + displayField + ".ToString();"); else codeBuild.AppendLine("lbl" + field.surfaceFieldName + "Value.Text = itm." + displayField + ".ToString();"); codeBuild.AppendLine("break;"); codeBuild.AppendLine("}"); } else { codeBuild.AppendLine("if (_obj." + lblField.surfaceFieldName + ".ToString() != String.Empty){"); codeBuild.AppendLine("foreach(oSurfaceLookup look in xData.GetTypedByCriteriaSpecific(\"recId\", typeof(oSurfaceLookup), \"recId\", _obj." + lblField.surfaceFieldName + ".ToString()))"); codeBuild.AppendLine("{"); if (prefix != String.Empty) codeBuild.AppendLine(prefix + field.surfaceFieldName + "Value.Text = look.display;"); else codeBuild.AppendLine("lbl" + field.surfaceFieldName + "Value.Text = look.display;"); codeBuild.AppendLine("break;"); codeBuild.AppendLine("}"); codeBuild.AppendLine("}"); } } else { codeBuild.AppendLine("if (_obj." + lblField.surfaceFieldName + ".ToString() != String.Empty)"); if (prefix != String.Empty) codeBuild.AppendLine(prefix + field.surfaceFieldName + "Value.Text = _obj." + lblField.surfaceFieldName + ".ToString();"); else codeBuild.AppendLine("lbl" + field.surfaceFieldName + "Value.Text = _obj." + lblField.surfaceFieldName + ".ToString();"); } codeBuild.AppendLine("// **** Label: " + field.surfaceFieldName + " END *****"); break; } } else if (field.relationalSurface.ToString() != "date" && field.relationalSurface.ToString() != "user" && field.relationalSurface.ToString() != "static") { //CVH 2018-09-03 If relationalfield is an Attachment Field on another surface, do something different (getting error on Value.Text) oSurfaceField lblField = new oSurfaceField(); int relFieldIsInt = 0; if (int.TryParse(field.relationalFields, out relFieldIsInt)) { foreach (oSurfaceField lblFieldTmp in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceField), "recId", field.relationalFields)) { lblField = lblFieldTmp; } } if (lblField.surfaceFieldTypeId == pNums.FieldType.Attachment.GetHashCode()) { //CVH don't do anything for now, not sure what should be done... } else { codeBuild.AppendLine("// **** Label: " + field.surfaceFieldName + " *****"); codeBuild.AppendLine("if (_obj." + field.surfaceFieldName + " != String.Empty)"); if (prefix != String.Empty) codeBuild.AppendLine(prefix + field.surfaceFieldName + "Value.Text = _obj." + field.surfaceFieldName + ".ToString();"); else codeBuild.AppendLine("lbl" + field.surfaceFieldName + "Value.Text = _obj." + field.surfaceFieldName + ".ToString();"); codeBuild.AppendLine("// **** Label: " + field.surfaceFieldName + " END *****"); } } } break; #endregion #region Text case pNums.FieldType.Text: codeBuild.AppendLine("// **** Text: " + field.surfaceFieldName + " *****"); codeBuild.AppendLine("if (_obj." + field.surfaceFieldName + " != String.Empty)"); codeBuild.AppendLine(prefix + field.surfaceFieldName + ".Text = _obj." + field.surfaceFieldName + ";"); codeBuild.AppendLine("// **** Text: " + field.surfaceFieldName + " END *****"); break; #endregion #region Number case pNums.FieldType.Number: if (field.surfaceFieldName != "ParentSurfaceItemId") { codeBuild.AppendLine("// **** Number: " + field.surfaceFieldName + " *****"); codeBuild.AppendLine(prefix + field.surfaceFieldName + ".Text = _obj." + field.surfaceFieldName + ".ToString();"); codeBuild.AppendLine("// **** Number: " + field.surfaceFieldName + " END *****"); } break; #endregion #region Decimal case pNums.FieldType.Decimal: codeBuild.AppendLine("// **** Decimal: " + field.surfaceFieldName + " *****"); codeBuild.AppendLine(prefix + field.surfaceFieldName + ".Text = utils.returnFormattedDecimal(Convert.ToString(_obj." + field.surfaceFieldName + "));"); codeBuild.AppendLine("// **** Decimal: " + field.surfaceFieldName + " END *****"); break; #endregion #region Picklist case pNums.FieldType.Picklist: codeBuild.AppendLine("// **** Picklist: " + field.surfaceFieldName + " *****"); //VIEW - build as a label if (prefix != String.Empty) { if (field.isCustomSource) { if (field.relationalObject != String.Empty && field.relationalObject != "0") { string fieldSelect = String.Empty; String[] flds = field.relationalFields.Split(char.Parse(",")); foreach (string f in flds) { if (fieldSelect == String.Empty) fieldSelect = f; else fieldSelect += " + ' ' + " + f; } codeBuild.AppendLine("if (_obj." + field.surfaceFieldName + ".ToString() != String.Empty){"); codeBuild.AppendLine("string query = \"Select " + fieldSelect + " AS Display FROM " + field.relationalObject + " WHERE " + field.relationalValues + " = \" + _obj." + field.surfaceFieldName + ".ToString();"); codeBuild.AppendLine("DataTable dt" + field.surfaceFieldName + " = xData.GetCustomTypedTable(query);"); codeBuild.AppendLine("foreach(DataRow row in dt" + field.surfaceFieldName + ".Rows)"); codeBuild.AppendLine("{"); codeBuild.AppendLine(prefix + field.surfaceFieldName + ".Text = row[0].ToString();"); codeBuild.AppendLine("break;"); codeBuild.AppendLine("}"); codeBuild.AppendLine("}"); } } else if (field.relationalObject.Length > 0 && field.relationalObject == "oSurface") { codeBuild.AppendLine(prefix + field.surfaceFieldName + ".Text = _obj." + field.surfaceFieldName + ";"); } else if (field.relationalObject.Length > 0 && field.relationalObject != "0") { string valueField = string.Empty; string displayField = string.Empty; DataTable dtModule = xData.GetTypedByCriteriaSpecificTable("recId", typeof(oModule), "objectName", field.relationalObject); foreach (DataRow row in dtModule.Rows) { valueField = row["valueField"].ToString(); displayField = row["displayField"].ToString(); } codeBuild.AppendLine("if (_obj." + field.surfaceFieldName + ".ToString() != String.Empty){"); codeBuild.AppendLine("foreach(" + field.relationalObject + " itm in xData.GetTypedByCriteriaSpecific(\"recId\", typeof(" + field.relationalObject + "), \"" + valueField + "\", _obj." + field.surfaceFieldName + ".ToString()))"); codeBuild.AppendLine("{"); codeBuild.AppendLine(prefix + field.surfaceFieldName + ".Text = itm." + displayField + ".ToString();"); codeBuild.AppendLine("break;"); codeBuild.AppendLine("}"); codeBuild.AppendLine("}"); } else { codeBuild.AppendLine("if (_obj." + field.surfaceFieldName + ".ToString() != String.Empty){"); codeBuild.AppendLine("foreach (oSurfaceLookup look in xData.GetTypedByCriteriaSpecific(\"recId\", typeof(oSurfaceLookup), \"recId\", _obj." + field.surfaceFieldName + ".ToString()))"); codeBuild.AppendLine("{"); codeBuild.AppendLine(prefix + field.surfaceFieldName + ".Text = look.display;"); codeBuild.AppendLine("break;"); codeBuild.AppendLine("}"); codeBuild.AppendLine("}"); } } else { if (field.isCustomSource) { if (field.relationalObject != String.Empty && field.relationalObject != "0") { string fieldSelect = String.Empty; String[] flds = field.relationalFields.Split(char.Parse(",")); foreach (string f in flds) { if (fieldSelect == String.Empty) fieldSelect = f; else fieldSelect += " + ' ' + " + f; } string query = "Select " + field.relationalValues + "," + fieldSelect + " As Display FROM " + field.relationalObject + " "; if (field.relationalWhere != String.Empty) { query += "WHERE " + field.relationalWhere + " "; } if (field.relationalOrderBy != String.Empty) { query += "ORDER By " + field.relationalOrderBy + " "; } codeBuild.AppendLine("string query" + field.surfaceFieldName + " = \"" + query + "\";"); codeBuild.AppendLine("DataTable custom" + field.surfaceFieldName + " = xData.GetCustomTypedTable(query" + field.surfaceFieldName + ");"); codeBuild.AppendLine(field.surfaceFieldName + ".DataSource = custom" + field.surfaceFieldName + ";"); codeBuild.AppendLine(field.surfaceFieldName + ".DataTextField = \"Display\";"); codeBuild.AppendLine(field.surfaceFieldName + ".DataValueField = \"" + field.relationalValues + "\";"); codeBuild.AppendLine(field.surfaceFieldName + ".DataBind();"); codeBuild.AppendLine(field.surfaceFieldName + ".Items.Insert(0, new ListItem(\"Select\", \"0\"));"); } codeBuild.AppendLine("if (" + field.surfaceFieldName + ".Items.FindByValue(_obj." + field.surfaceFieldName + ".ToString()) != null)"); codeBuild.AppendLine(field.surfaceFieldName + ".SelectedValue = _obj." + field.surfaceFieldName + ".ToString();"); } else if (field.relationalObject.Length > 0 && field.relationalObject == "oSurface") { //CVH 2018-11-07 Fix int fieldID = 0; int.TryParse(field.relationalFields, out fieldID); //CVH 2018-08-31 Change to unique param name codeBuild.AppendLine("int surfaceFieldId" + field.recId + " =" + fieldID + ";"); codeBuild.AppendLine("DataTable dtSurfaceData" + field.recId + " = xData.GetSurfaceModulePicklist(surfaceFieldId" + field.recId + ");"); codeBuild.AppendLine(field.surfaceFieldName + ".DataSource = dtSurfaceData" + field.recId + ";"); codeBuild.AppendLine(field.surfaceFieldName + ".DataTextField = \"DataText\";"); codeBuild.AppendLine(field.surfaceFieldName + ".DataValueField = \"DataValue\";"); codeBuild.AppendLine(field.surfaceFieldName + ".DataBind();"); codeBuild.AppendLine(field.surfaceFieldName + ".Items.Insert(0, new ListItem(\"Select\", \"0\"));"); //CVH 2011-08 Fix - find by text codeBuild.AppendLine("if (" + field.surfaceFieldName + ".Items.FindByText(_obj." + field.surfaceFieldName + ".ToString()) != null)"); codeBuild.AppendLine(field.surfaceFieldName + ".SelectedValue = " + field.surfaceFieldName + ".Items.FindByText(_obj." + field.surfaceFieldName + ".ToString()).Value;"); } else if (field.relationalObject.Length > 0 && field.relationalObject != "0") { string valueField = string.Empty; string displayField = string.Empty; DataTable dtModule = xData.GetTypedByCriteriaSpecificTable("recId", typeof(oModule), "objectName", field.relationalObject); foreach (DataRow row in dtModule.Rows) { valueField = row["valueField"].ToString(); displayField = row["displayField"].ToString(); } codeBuild.AppendLine("DataTable dtModuleData" + field.surfaceFieldName + " = xData.GetTypedByCriteriaSpecificTable(\"recId\", typeof(" + field.relationalObject + "), \"\", \"\");"); codeBuild.AppendLine(field.surfaceFieldName + ".DataSource = dtModuleData" + field.surfaceFieldName + ";"); codeBuild.AppendLine(field.surfaceFieldName + ".DataTextField = \"" + displayField + "\";"); codeBuild.AppendLine(field.surfaceFieldName + ".DataValueField = \"" + valueField + "\";"); codeBuild.AppendLine(field.surfaceFieldName + ".DataBind();"); codeBuild.AppendLine(field.surfaceFieldName + ".Items.Insert(0, new ListItem(\"Select\", \"0\"));"); codeBuild.AppendLine("if (" + field.surfaceFieldName + ".Items.FindByValue(_obj." + field.surfaceFieldName + ".ToString()) != null)"); codeBuild.AppendLine(field.surfaceFieldName + ".SelectedValue = _obj." + field.surfaceFieldName + ".ToString();"); } else { codeBuild.AppendLine("if (" + field.surfaceFieldName + ".Items.FindByValue(_obj." + field.surfaceFieldName + ".ToString()) != null)"); codeBuild.AppendLine(field.surfaceFieldName + ".SelectedValue = _obj." + field.surfaceFieldName + ".ToString();"); } } codeBuild.AppendLine("// **** Picklist: " + field.surfaceFieldName + " END *****"); break; #endregion #region MultiPicklist case pNums.FieldType.MultiPicklist: codeBuild.AppendLine("// **** Multi-Picklist: " + field.surfaceFieldName + " *****"); if (prefix != String.Empty) { if (field.isCustomSource) { if (field.relationalObject != String.Empty && field.relationalObject != "0") { string fieldSelect = String.Empty; String[] flds = field.relationalFields.Split(char.Parse(",")); foreach (string f in flds) { if (fieldSelect == String.Empty) fieldSelect = f; else fieldSelect += " + ' ' + " + f; } string query = "Select " + field.relationalValues + "," + fieldSelect + " As Display FROM " + field.relationalObject + " "; if (field.relationalWhere != String.Empty) { query += "WHERE " + field.relationalWhere + " "; } if (field.relationalOrderBy != String.Empty) { query += "ORDER By " + field.relationalOrderBy + " "; } codeBuild.AppendLine("string query" + field.surfaceFieldName + " = \"" + query + "\";"); codeBuild.AppendLine("DataTable custom" + field.surfaceFieldName + " = xData.GetCustomTypedTable(query" + field.surfaceFieldName + ");"); codeBuild.AppendLine("foreach (DataRow row in custom" + field.surfaceFieldName + ".Rows)"); codeBuild.AppendLine("{"); codeBuild.AppendLine("foreach (string valueId in _obj." + field.surfaceFieldName + ".Split(','))"); codeBuild.AppendLine("{"); codeBuild.AppendLine("if (valueId == row[0].ToString())"); codeBuild.AppendLine("{"); codeBuild.AppendLine(prefix + field.surfaceFieldName + ".Text += row[\"Display\"].ToString();"); codeBuild.AppendLine("break;"); codeBuild.AppendLine("}"); codeBuild.AppendLine("}"); codeBuild.AppendLine("}"); } } else { codeBuild.AppendLine("foreach (string valueId in _obj." + field.surfaceFieldName + ".Split(','))"); codeBuild.AppendLine("{"); codeBuild.AppendLine("foreach (oSurfaceLookup look in xData.GetTypedByCriteriaSpecific(\"recId\", typeof(oSurfaceLookup), \"recId\", valueId))"); codeBuild.AppendLine("{"); codeBuild.AppendLine(prefix + field.surfaceFieldName + ".Text += look.customCode;"); codeBuild.AppendLine("}"); codeBuild.AppendLine("}"); } } else { if (field.isCustomSource) { if (field.relationalObject != String.Empty && field.relationalObject != "0") { string fieldSelect = String.Empty; String[] flds = field.relationalFields.Split(char.Parse(",")); foreach (string f in flds) { if (fieldSelect == String.Empty) fieldSelect = f; else fieldSelect += " + ' ' + " + f; } string query = "Select " + field.relationalValues + "," + fieldSelect + " As Display FROM " + field.relationalObject + " "; if (field.relationalWhere != String.Empty) { query += "WHERE " + field.relationalWhere + " "; } if (field.relationalOrderBy != String.Empty) { query += "ORDER By " + field.relationalOrderBy + " "; } codeBuild.AppendLine("string query" + field.surfaceFieldName + " = \"" + query + "\";"); codeBuild.AppendLine("DataTable custom" + field.surfaceFieldName + " = xData.GetCustomTypedTable(query" + field.surfaceFieldName + ");"); codeBuild.AppendLine(field.surfaceFieldName + ".DataSource = custom" + field.surfaceFieldName + ";"); codeBuild.AppendLine(field.surfaceFieldName + ".DataTextField = \"Display\";"); codeBuild.AppendLine(field.surfaceFieldName + ".DataValueField = \"" + field.relationalValues + "\";"); codeBuild.AppendLine(field.surfaceFieldName + ".DataBind();"); codeBuild.AppendLine("String[] arr" + field.surfaceFieldName + " = _obj." + field.surfaceFieldName + ".Split(char.Parse(\",\"));"); codeBuild.AppendLine("foreach (string s in arr" + field.surfaceFieldName + ")"); codeBuild.AppendLine("{"); codeBuild.AppendLine("foreach (ListItem item in " + field.surfaceFieldName + ".Items)"); codeBuild.AppendLine("{"); codeBuild.AppendLine("if (item.Value == s)"); codeBuild.AppendLine("{"); codeBuild.AppendLine("item.Selected = true;"); codeBuild.AppendLine("break;"); codeBuild.AppendLine("}"); codeBuild.AppendLine("}"); codeBuild.AppendLine("}"); } } else { codeBuild.AppendLine("String[] arr" + field.surfaceFieldName + " = _obj." + field.surfaceFieldName + ".Split(char.Parse(\",\"));"); codeBuild.AppendLine("foreach (string s in arr" + field.surfaceFieldName + ")"); codeBuild.AppendLine("{"); codeBuild.AppendLine("foreach (ListItem item in " + field.surfaceFieldName + ".Items)"); codeBuild.AppendLine("{"); codeBuild.AppendLine("if (item.Value == s)"); codeBuild.AppendLine("{"); codeBuild.AppendLine("item.Selected = true;"); codeBuild.AppendLine("break;"); codeBuild.AppendLine("}"); codeBuild.AppendLine("}"); codeBuild.AppendLine("}"); } } codeBuild.AppendLine("// **** Multi-Picklist: " + field.surfaceFieldName + " END *****"); break; #endregion #region Date case pNums.FieldType.Date: codeBuild.AppendLine("// **** Date Picker: " + field.surfaceFieldName + " *****"); codeBuild.AppendLine("if (_obj." + field.surfaceFieldName + ".Year > 1901)"); if (field.surfaceDateTypeId == pNums.SurfaceDateType.Year.GetHashCode()) codeBuild.AppendLine(prefix + field.surfaceFieldName + ".Text = _obj." + field.surfaceFieldName + ".Year.ToString();"); else codeBuild.AppendLine(prefix + field.surfaceFieldName + ".Text = utils.formatDateToString(_obj." + field.surfaceFieldName + ");"); codeBuild.AppendLine("// **** Date Picker: " + field.surfaceFieldName + " END *****"); break; #endregion #region Time case pNums.FieldType.Time: codeBuild.AppendLine("// **** Clock Picker: " + field.surfaceFieldName + " *****"); codeBuild.AppendLine(prefix + field.surfaceFieldName + ".Text = utils.formatTimeToString(_obj." + field.surfaceFieldName + ");"); codeBuild.AppendLine("// **** Clock Picker: " + field.surfaceFieldName + " END *****"); break; #endregion #region Checkbox case pNums.FieldType.Checkbox: codeBuild.AppendLine("// **** CheckBox: " + field.surfaceFieldName + " *****"); if (prefix != String.Empty) { codeBuild.AppendLine(prefix + field.surfaceFieldName + ".Text = _obj." + field.surfaceFieldName + ".ToString();"); } else { codeBuild.AppendLine(field.surfaceFieldName + ".Checked = _obj." + field.surfaceFieldName + ";"); } codeBuild.AppendLine("// **** CheckBox: " + field.surfaceFieldName + " END *****"); break; #endregion #region RadioButtonList case pNums.FieldType.RadioButtonList: codeBuild.AppendLine("// **** RadioButtonList: " + field.surfaceFieldName + " *****"); if (prefix != String.Empty) { if (field.isCustomSource) { if (field.relationalObject != String.Empty && field.relationalObject != "0") { string fieldSelect = String.Empty; String[] flds = field.relationalFields.Split(char.Parse(",")); foreach (string f in flds) { if (fieldSelect == String.Empty) fieldSelect = f; else fieldSelect += " + ' ' + " + f; } codeBuild.AppendLine("if (_obj." + field.surfaceFieldName + ".ToString() != String.Empty){"); codeBuild.AppendLine("string query = \"Select " + fieldSelect + " AS Display FROM " + field.relationalObject + " WHERE " + field.relationalValues + " = \" + _obj." + field.surfaceFieldName + ".ToString();"); codeBuild.AppendLine("DataTable dt" + field.surfaceFieldName + " = xData.GetCustomTypedTable(query);"); codeBuild.AppendLine("foreach(DataRow row in dt" + field.surfaceFieldName + ".Rows)"); codeBuild.AppendLine("{"); codeBuild.AppendLine(prefix + field.surfaceFieldName + ".Text = row[0].ToString();"); codeBuild.AppendLine("break;"); codeBuild.AppendLine("}"); codeBuild.AppendLine("}"); } } else if (field.relationalObject.Length > 0 && field.relationalObject != "0") { string valueField = string.Empty; string displayField = string.Empty; DataTable dtModule = xData.GetTypedByCriteriaSpecificTable("recId", typeof(oModule), "objectName", field.relationalObject); foreach (DataRow row in dtModule.Rows) { valueField = row["valueField"].ToString(); displayField = row["displayField"].ToString(); } codeBuild.AppendLine("if (_obj." + field.surfaceFieldName + ".ToString() != String.Empty){"); codeBuild.AppendLine("foreach(" + field.relationalObject + " itm in xData.GetTypedByCriteriaSpecific(\"recId\", typeof(" + field.relationalObject + "), \"" + valueField + "\", \"_obj." + field.surfaceFieldName + ".ToString()\");"); codeBuild.AppendLine("{"); codeBuild.AppendLine(prefix + field.surfaceFieldName + ".Text = itm." + displayField + ".ToString();"); codeBuild.AppendLine("break;"); codeBuild.AppendLine("}"); codeBuild.AppendLine("}"); } else { codeBuild.AppendLine("if (_obj." + field.surfaceFieldName + ".ToString() != String.Empty){"); codeBuild.AppendLine("foreach (oSurfaceLookup look in xData.GetTypedByCriteriaSpecific(\"recId\", typeof(oSurfaceLookup), \"recId\", _obj." + field.surfaceFieldName + ".ToString()))"); codeBuild.AppendLine("{"); codeBuild.AppendLine(prefix + field.surfaceFieldName + ".Text = look.display;"); codeBuild.AppendLine("break;"); codeBuild.AppendLine("}"); codeBuild.AppendLine("}"); } } else { if (field.isCustomSource) { if (field.relationalObject != String.Empty && field.relationalObject != "0") { string fieldSelect = String.Empty; String[] flds = field.relationalFields.Split(char.Parse(",")); foreach (string f in flds) { if (fieldSelect == String.Empty) fieldSelect = f; else fieldSelect += " + ' ' + " + f; } string query = "Select " + field.relationalValues + "," + fieldSelect + " As Display FROM " + field.relationalObject + " "; if (field.relationalWhere != String.Empty) { query += "WHERE " + field.relationalWhere + " "; } ////if (field.relationalOrderBy != String.Empty) { query += "ORDER By " + field.relationalOrderBy + " "; } codeBuild.AppendLine("string query" + field.surfaceFieldName + " = \"" + query + "\";"); codeBuild.AppendLine("DataTable custom" + field.surfaceFieldName + " = xData.GetCustomTypedTable(query" + field.surfaceFieldName + ");"); codeBuild.AppendLine(field.surfaceFieldName + ".DataSource = custom" + field.surfaceFieldName + ";"); codeBuild.AppendLine(field.surfaceFieldName + ".DataTextField = \"Display\";"); codeBuild.AppendLine(field.surfaceFieldName + ".DataValueField = \"" + field.relationalValues + "\";"); codeBuild.AppendLine(field.surfaceFieldName + ".DataBind();"); } } else if (field.relationalObject.Length > 0 && field.relationalObject != "0") { string valueField = string.Empty; string displayField = string.Empty; DataTable dtModule = xData.GetTypedByCriteriaSpecificTable("recId", typeof(oModule), "objectName", field.relationalObject); foreach (DataRow row in dtModule.Rows) { valueField = row["valueField"].ToString(); displayField = row["displayField"].ToString(); } codeBuild.AppendLine("DataTable dtModuleData" + field.surfaceFieldName + " = xData.GetTypedByCriteriaSpecificTable(\"recId\", typeof(" + field.relationalObject + "), \"\", \"\");"); codeBuild.AppendLine(field.surfaceFieldName + ".DataSource = dtModuleData" + field.surfaceFieldName + ";"); codeBuild.AppendLine(field.surfaceFieldName + ".DataTextField = \"" + displayField + "\";"); codeBuild.AppendLine(field.surfaceFieldName + ".DataValueField = \"" + valueField + "\";"); codeBuild.AppendLine(field.surfaceFieldName + ".DataBind();"); } codeBuild.AppendLine("if (" + field.surfaceFieldName + ".Items.FindByValue(_obj." + field.surfaceFieldName + ".ToString()) != null)"); codeBuild.AppendLine(field.surfaceFieldName + ".SelectedValue = _obj." + field.surfaceFieldName + ".ToString();"); } if (field.isAutoPostback && !isView) codeBuild.AppendLine("SetToggleViewActionVisibilityRadioButtonList(" + field.surfaceFieldName + ");"); codeBuild.AppendLine("// **** RadioButtonList: " + field.surfaceFieldName + " END *****"); break; #endregion #region Caption case pNums.FieldType.Caption: codeBuild.AppendLine("// **** Caption: " + field.surfaceFieldName + " *****"); codeBuild.AppendLine("if (_obj." + field.surfaceFieldName + " != String.Empty)"); if (prefix != String.Empty) codeBuild.AppendLine(prefix + field.surfaceFieldName + ".Value = _obj." + field.surfaceFieldName + ";"); else codeBuild.AppendLine(field.surfaceFieldName + ".Text = _obj." + field.surfaceFieldName + ";"); codeBuild.AppendLine("// **** Caption: " + field.surfaceFieldName + " END *****"); break; #endregion //#region Content //case pNums.FieldType.Content: // codeBuild.AppendLine("// **** Content: " + field.surfaceFieldName + " *****"); // codeBuild.AppendLine("if (_obj." + field.surfaceFieldName + " > 0)"); // codeBuild.AppendLine("{"); // codeBuild.AppendLine("foreach (oContent page in xData.GetTypedByCriteriaSpecific(\"recId\", typeof(oContent), \"recId\", _obj." + field.surfaceFieldName + ".ToString()))"); // codeBuild.AppendLine("{"); // if (prefix != String.Empty) // codeBuild.AppendLine(prefix + field.surfaceFieldName + ".Text = page.contentHTML;"); // else // codeBuild.AppendLine(field.surfaceFieldName + ".Text = page.contentHTML;"); // codeBuild.AppendLine("break;"); // codeBuild.AppendLine("}"); // codeBuild.AppendLine("}"); // codeBuild.AppendLine("// **** Content: " + field.surfaceFieldName + " END *****"); // break; //#endregion #region FormulaField case pNums.FieldType.FormulaField://dont populate on form //codeBuild.AppendLine("// **** Formula Field: " + field.surfaceFieldName + " *****"); //codeBuild.AppendLine("if (_obj." + field.surfaceFieldName + " > 0)"); //codeBuild.AppendLine(field.surfaceFieldName + ".Text = utils.returnFormattedDecimal(Convert.ToString(_obj." + field.surfaceFieldName + "));"); //codeBuild.AppendLine("// **** Formula Field: " + field.surfaceFieldName + " END *****"); break; #endregion #region Address case pNums.FieldType.Address: codeBuild.AppendLine("// **** Address: " + field.surfaceFieldName + " *****"); if (prefix != String.Empty) { codeBuild.AppendLine("string _addr" + field.surfaceFieldName + " = _obj." + field.surfaceFieldName + ";"); codeBuild.AppendLine("Label txtAddress" + field.surfaceFieldName + " = (Label)pnlSurfaceView.FindControl(\"" + prefix + field.surfaceFieldName + "\");"); codeBuild.AppendLine("int itemNo" + field.surfaceFieldName + " = 0;"); codeBuild.AppendLine("foreach (string addressLine in _addr" + field.surfaceFieldName + ".Split(new string[] { \"~|~\" }, StringSplitOptions.None))"); codeBuild.AppendLine("{"); codeBuild.AppendLine("itemNo" + field.surfaceFieldName + " ++;"); codeBuild.AppendLine("if (txtAddress" + field.surfaceFieldName + " != null && addressLine != String.Empty && addressLine.Substring(1, 1) == itemNo" + field.surfaceFieldName + ".ToString())"); codeBuild.AppendLine("{"); codeBuild.AppendLine("txtAddress" + field.surfaceFieldName + ".Text += addressLine.Substring(3) + \" \";"); codeBuild.AppendLine("}"); codeBuild.AppendLine("}"); } else { codeBuild.AppendLine("string _addr" + field.surfaceFieldName + " = _obj." + field.surfaceFieldName + ";"); codeBuild.AppendLine("int itemNo" + field.surfaceFieldName + " = 0;"); codeBuild.AppendLine("foreach (string addressLine in _addr" + field.surfaceFieldName + ".Split(new string[] { \"~|~\" }, StringSplitOptions.None))"); codeBuild.AppendLine("{"); codeBuild.AppendLine("itemNo" + field.surfaceFieldName + " ++;"); codeBuild.AppendLine("TextBox txtAddress" + field.surfaceFieldName + " = (TextBox)pnlSurfaceForm.FindControl(\"" + field.surfaceFieldName + "\" + itemNo" + field.surfaceFieldName + ");"); codeBuild.AppendLine("if (txtAddress" + field.surfaceFieldName + " != null && addressLine != String.Empty && addressLine.Substring(1, 1) == itemNo" + field.surfaceFieldName + ".ToString())"); codeBuild.AppendLine("{"); codeBuild.AppendLine("txtAddress" + field.surfaceFieldName + ".Text = addressLine.Substring(3) + \" \";"); codeBuild.AppendLine("}"); codeBuild.AppendLine("}"); } codeBuild.AppendLine("// **** Address: " + field.surfaceFieldName + " END *****"); break; #endregion #region CheckboxList case pNums.FieldType.CheckboxList: codeBuild.AppendLine("// **** CheckBoxList: " + field.surfaceFieldName + " *****"); if (prefix != String.Empty) { if (field.isCustomSource) { if (field.relationalObject != String.Empty && field.relationalObject != "0") { string fieldSelect = String.Empty; String[] flds = field.relationalFields.Split(char.Parse(",")); foreach (string f in flds) { if (fieldSelect == String.Empty) fieldSelect = f; else fieldSelect += " + ' ' + " + f; } string query = "Select " + field.relationalValues + "," + fieldSelect + " As Display FROM " + field.relationalObject + " "; if (field.relationalWhere != String.Empty) { query += "WHERE " + field.relationalWhere + " "; } if (field.relationalOrderBy != String.Empty) { query += "ORDER By " + field.relationalOrderBy + " "; } codeBuild.AppendLine("string query" + field.surfaceFieldName + " = \"" + query + "\";"); codeBuild.AppendLine("DataTable custom" + field.surfaceFieldName + " = xData.GetCustomTypedTable(query" + field.surfaceFieldName + ");"); codeBuild.AppendLine("foreach (DataRow row in custom" + field.surfaceFieldName + ".Rows)"); codeBuild.AppendLine("{"); codeBuild.AppendLine("foreach (string valueId in _obj." + field.surfaceFieldName + ".Split(','))"); codeBuild.AppendLine("{"); codeBuild.AppendLine("if (valueId == row[0].ToString())"); codeBuild.AppendLine("{"); codeBuild.AppendLine(prefix + field.surfaceFieldName + ".Text += row[\"Display\"].ToString();"); codeBuild.AppendLine("break;"); codeBuild.AppendLine("}"); codeBuild.AppendLine("}"); codeBuild.AppendLine("}"); } } else { codeBuild.AppendLine("foreach (string valueId in _obj." + field.surfaceFieldName + ".Split(','))"); codeBuild.AppendLine("{"); codeBuild.AppendLine("foreach (oSurfaceLookup look in xData.GetTypedByCriteriaSpecific(\"recId\", typeof(oSurfaceLookup), \"recId\", valueId))"); codeBuild.AppendLine("{"); codeBuild.AppendLine(prefix + field.surfaceFieldName + ".Text += look.customCode;"); codeBuild.AppendLine("}"); codeBuild.AppendLine("}"); } } else { if (field.isCustomSource) { if (field.relationalObject != String.Empty && field.relationalObject != "0") { string fieldSelect = String.Empty; String[] flds = field.relationalFields.Split(char.Parse(",")); foreach (string f in flds) { if (fieldSelect == String.Empty) fieldSelect = f; else fieldSelect += " + ' ' + " + f; } string query = "Select " + field.relationalValues + "," + fieldSelect + " As Display FROM " + field.relationalObject + " "; if (field.relationalWhere != String.Empty) { query += "WHERE " + field.relationalWhere + " "; } if (field.relationalOrderBy != String.Empty) { query += "ORDER By " + field.relationalOrderBy + " "; } codeBuild.AppendLine("string query" + field.surfaceFieldName + " = \"" + query + "\";"); codeBuild.AppendLine("DataTable custom" + field.surfaceFieldName + " = xData.GetCustomTypedTable(query" + field.surfaceFieldName + ");"); codeBuild.AppendLine(field.surfaceFieldName + ".DataSource = custom" + field.surfaceFieldName + ";"); codeBuild.AppendLine(field.surfaceFieldName + ".DataTextField = \"Display\";"); codeBuild.AppendLine(field.surfaceFieldName + ".DataValueField = \"" + field.relationalValues + "\";"); codeBuild.AppendLine(field.surfaceFieldName + ".DataBind();"); codeBuild.AppendLine("String[] arr" + field.surfaceFieldName + " = _obj." + field.surfaceFieldName + ".Split(char.Parse(\",\"));"); codeBuild.AppendLine("foreach (string s in arr" + field.surfaceFieldName + ")"); codeBuild.AppendLine("{"); if (field.alternateView) { codeBuild.AppendLine("if (" + field.surfaceFieldName + ".Items.FindByValue(s) != null)"); codeBuild.AppendLine("" + field.surfaceFieldName + ".Items.FindByValue(s).Selected = true;"); } else { codeBuild.AppendLine("foreach (Control ctl in " + field.surfaceFieldName + ".Controls)"); codeBuild.AppendLine("{"); codeBuild.AppendLine("if (ctl.ID == \"" + field.surfaceFieldName + "_\" + s + \"\")"); codeBuild.AppendLine("{"); codeBuild.AppendLine("((CheckBox)ctl).Checked = true;"); codeBuild.AppendLine("break;"); codeBuild.AppendLine("}"); codeBuild.AppendLine("}"); } codeBuild.AppendLine("}"); } } else { //CVH 2017-08-23 Cater for scenarios where checkboxlist is a checkboxlist and not a div with checkboxes (alternateview and not I think...) codeBuild.AppendLine("String[] arr" + field.surfaceFieldName + " = _obj." + field.surfaceFieldName + ".Split(char.Parse(\",\"));"); codeBuild.AppendLine("foreach (string s in arr" + field.surfaceFieldName + ")"); codeBuild.AppendLine("{"); if (field.alternateView) { codeBuild.AppendLine("if (" + field.surfaceFieldName + ".Items.FindByValue(s) != null)"); codeBuild.AppendLine("" + field.surfaceFieldName + ".Items.FindByValue(s).Selected = true;"); } else { codeBuild.AppendLine("foreach (Control ctl in " + field.surfaceFieldName + ".Controls)"); codeBuild.AppendLine("{"); codeBuild.AppendLine("if (ctl.ID == \"" + field.surfaceFieldName + "_\" + s + \"\")"); codeBuild.AppendLine("{"); codeBuild.AppendLine("((CheckBox)ctl).Checked = true;"); codeBuild.AppendLine("break;"); codeBuild.AppendLine("}"); codeBuild.AppendLine("}"); } codeBuild.AppendLine("}"); } } codeBuild.AppendLine("// **** CheckBoxList: " + field.surfaceFieldName + " END *****"); break; #endregion #region Image case pNums.FieldType.Image: codeBuild.AppendLine("// **** Image: " + field.surfaceFieldName + " *****"); codeBuild.AppendLine("string imageUrl_" + field.surfaceFieldName + " = \"/images/placeholder.png\";"); codeBuild.AppendLine("if (_obj." + field.surfaceFieldName + " != String.Empty)"); codeBuild.AppendLine("imageUrl_" + field.surfaceFieldName + " = \"/upload/surface/\" + _obj." + field.surfaceFieldName + ";"); if (prefix != String.Empty) { codeBuild.AppendLine("HtmlGenericControl imageDiv" + field.surfaceFieldName + " = (HtmlGenericControl)pnlSurfaceView.FindControl(\"v" + field.surfaceFieldName + "Div\");"); codeBuild.AppendLine("if (imageDiv" + field.surfaceFieldName + " != null)"); codeBuild.AppendLine("{"); codeBuild.AppendLine("imageDiv" + field.surfaceFieldName + ".Style.Add(\"background-image\", \"url(\" + imageUrl_" + field.surfaceFieldName + " + \")\");"); codeBuild.AppendLine("}"); } else { codeBuild.AppendLine("HtmlGenericControl imageDiv" + field.surfaceFieldName + " = (HtmlGenericControl)pnlSurfaceForm.FindControl(\"" + field.surfaceFieldName + "Div\");"); codeBuild.AppendLine("if (imageDiv" + field.surfaceFieldName + " != null)"); codeBuild.AppendLine("{"); codeBuild.AppendLine("imageDiv" + field.surfaceFieldName + ".Style.Add(\"background-image\", \"url(\" + imageUrl_" + field.surfaceFieldName + " + \")\");"); codeBuild.AppendLine("}"); } codeBuild.AppendLine("// **** Image: " + field.surfaceFieldName + " END *****"); break; #endregion #region BarcodeScanner case pNums.FieldType.BarcodeScanner: codeBuild.AppendLine("// **** BarcodeScanner: " + field.surfaceFieldName + " *****"); codeBuild.AppendLine("if (_obj." + field.surfaceFieldName + " != String.Empty)"); codeBuild.AppendLine(prefix + field.surfaceFieldName + ".Text = _obj." + field.surfaceFieldName + ";"); codeBuild.AppendLine("// **** BarcodeScanner: " + field.surfaceFieldName + " END *****"); break; #endregion } } } generatedCode = codeBuild.ToString(); } catch (Exception ex) { exception.HandleException("surfaceHandler:", MethodBase.GetCurrentMethod().Name, ex, HttpContext.Current.Session["user"]); } } /// /// Build Generated Code for populate /// /// /// private static void BuildSaveFormCode(ref string generatedCode, oSurface _surface, ArrayList surfaceFields) { try { StringBuilder codeBuild = new StringBuilder(); string objectName = "o" + _surface.name; codeBuild.AppendLine(objectName + " _obj = new " + objectName + "();"); codeBuild.AppendLine("if (base.Entity != null)"); codeBuild.AppendLine("_obj = (" + objectName + ")base.Entity;"); codeBuild.AppendLine("_obj.itemID = _surfaceItem.recId;"); codeBuild.AppendLine("_obj.surfaceId = _surfaceItem.surfaceId;"); codeBuild.AppendLine("_obj.isActive = true;"); codeBuild.AppendLine(""); foreach (oSurfaceField field in surfaceFields) { if (!field.surfaceFieldName.StartsWith("_"))//ignore orphaned fields { pNums.FieldType typ = (pNums.FieldType)Enum.ToObject(typeof(pNums.FieldType), field.surfaceFieldTypeId); switch (typ) { #region Label case pNums.FieldType.Label: //CVH 2017-08-23 Cater for system labels: date and user logged if (field.relationalSurface == "date") { codeBuild.AppendLine("// **** Label: " + field.surfaceFieldName + " *****"); codeBuild.AppendLine("if (_surfaceItem.dateUpdated.Year <= 1900)"); codeBuild.AppendLine("_obj." + field.surfaceFieldName + " = utils.formatDateToString(_surfaceItem.dateCreated);"); codeBuild.AppendLine("else"); codeBuild.AppendLine("_obj." + field.surfaceFieldName + " = utils.formatDateToString(_surfaceItem.dateCreated) + \" (last updated on \" + utils.formatDateToString(_surfaceItem.dateUpdated) + \")\";"); codeBuild.AppendLine("// **** Label: " + field.surfaceFieldName + " End *****"); } else if (field.relationalSurface == "user") { codeBuild.AppendLine("// **** Label: " + field.surfaceFieldName + " *****"); codeBuild.AppendLine("if (_surfaceItem.updatedBy == 0)"); codeBuild.AppendLine("{"); codeBuild.AppendLine("foreach (ovUserShared createUsr in xData.GetTypedByCriteriaSpecific(\"recId\", typeof(ovUserShared), \"recId\", _surfaceItem.createdBy.ToString()))"); codeBuild.AppendLine("{"); codeBuild.AppendLine("_obj." + field.surfaceFieldName + " = createUsr.userDisplay;"); codeBuild.AppendLine("break;"); codeBuild.AppendLine("}"); codeBuild.AppendLine("}"); codeBuild.AppendLine("else"); codeBuild.AppendLine("{"); codeBuild.AppendLine("foreach (ovUserShared updateUsr in xData.GetTypedByCriteriaSpecific(\"recId\", typeof(ovUserShared), \"recId\", _surfaceItem.updatedBy.ToString()))"); codeBuild.AppendLine("{"); codeBuild.AppendLine("if (_obj." + field.surfaceFieldName + ".IndexOf(\"(\") >= 0)"); codeBuild.AppendLine("_obj." + field.surfaceFieldName + " = _obj." + field.surfaceFieldName + ".Substring(0, _obj." + field.surfaceFieldName + ".IndexOf(\"(\")) + \" (last updated by \" + updateUsr.userDisplay + \")\";"); codeBuild.AppendLine("else"); codeBuild.AppendLine("_obj." + field.surfaceFieldName + " = _obj." + field.surfaceFieldName + " + \" (last updated by \" + updateUsr.userDisplay + \")\";"); codeBuild.AppendLine("break;"); codeBuild.AppendLine("}"); codeBuild.AppendLine("}"); codeBuild.AppendLine("// **** Label: " + field.surfaceFieldName + " End *****"); } else if (!field.isLabelHidden && !field.isHidden) { //CVH 2018-09-03 If relationalfield is an Attachment Field, do something different (getting error on Value.Text) oSurfaceField lblField = new oSurfaceField(); int relFieldIsInt = 0; if (int.TryParse(field.relationalFields, out relFieldIsInt)) { foreach (oSurfaceField lblFieldTmp in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceField), "recId", field.relationalFields)) { lblField = lblFieldTmp; } } if (lblField.surfaceFieldTypeId == pNums.FieldType.Attachment.GetHashCode()) { //CVH don't do anything for now, not sure what should be done... } else { codeBuild.AppendLine("// **** Label: " + field.surfaceFieldName + " *****"); codeBuild.AppendLine("_obj." + field.surfaceFieldName + " = lbl" + field.surfaceFieldName + "Value.Text;"); codeBuild.AppendLine("// **** Label: " + field.surfaceFieldName + " End *****"); } } break; #endregion #region Text case pNums.FieldType.Text: codeBuild.AppendLine("// **** Text: " + field.surfaceFieldName + " *****"); codeBuild.AppendLine("_obj." + field.surfaceFieldName + " = " + field.surfaceFieldName + ".Text;"); codeBuild.AppendLine("// **** Text: " + field.surfaceFieldName + " END *****"); break; #endregion #region Number case pNums.FieldType.Number: if (field.surfaceFieldName == "ParentSurfaceItemId") { codeBuild.AppendLine("// **** Parent Surface Item ID: " + field.surfaceFieldName + " *****"); codeBuild.AppendLine("_obj." + field.surfaceFieldName + " = base.ParentSurfaceItemId;"); codeBuild.AppendLine("// **** Parent Surface Item ID: " + field.surfaceFieldName + " END *****"); } else { codeBuild.AppendLine("// **** Number: " + field.surfaceFieldName + " *****"); codeBuild.AppendLine("if (" + field.surfaceFieldName + ".Text != String.Empty)"); codeBuild.AppendLine("_obj." + field.surfaceFieldName + " = int.Parse(" + field.surfaceFieldName + ".Text);"); codeBuild.AppendLine("// **** Number: " + field.surfaceFieldName + " END *****"); } break; #endregion #region Decimal case pNums.FieldType.Decimal: codeBuild.AppendLine("// **** Decimal: " + field.surfaceFieldName + " *****"); codeBuild.AppendLine("if (" + field.surfaceFieldName + ".Text != String.Empty)"); codeBuild.AppendLine("_obj." + field.surfaceFieldName + " = decimal.Parse(" + field.surfaceFieldName + ".Text);"); codeBuild.AppendLine("// **** Decimal: " + field.surfaceFieldName + "END *****"); break; #endregion #region Picklist case pNums.FieldType.Picklist: codeBuild.AppendLine("// **** Picklist: " + field.surfaceFieldName + " *****"); if (field.isCustomSource) { codeBuild.AppendLine("_obj." + field.surfaceFieldName + " = " + field.surfaceFieldName + ".SelectedValue;"); } else if (field.relationalObject.Length > 0 && field.relationalObject == "oSurface") { //codeBuild.AppendLine("_obj." + field.surfaceFieldName + " = " + field.surfaceFieldName + ".SelectedText;"); QuoteInformation_CustomerTradingName.SelectedItem != null ? QuoteInformation_CustomerTradingName.SelectedItem.Text : "" codeBuild.AppendLine("_obj." + field.surfaceFieldName + " = " + field.surfaceFieldName + ".SelectedItem != null ? " + field.surfaceFieldName + ".SelectedItem.Text : \"\"; "); } else if (field.relationalObject.Length > 0 && field.relationalObject != "0") { codeBuild.AppendLine("_obj." + field.surfaceFieldName + " = " + field.surfaceFieldName + ".SelectedValue;"); } else { codeBuild.AppendLine("_obj." + field.surfaceFieldName + " = int.Parse(" + field.surfaceFieldName + ".SelectedValue);"); } codeBuild.AppendLine("// **** Picklist: " + field.surfaceFieldName + " END *****"); break; #endregion #region MultiPicklist case pNums.FieldType.MultiPicklist: codeBuild.AppendLine("// **** Multi-Picklist: " + field.surfaceFieldName + " *****"); codeBuild.AppendLine("var lst" + field.surfaceFieldName + " = " + field.surfaceFieldName + ".Items.GetSelectedItems();"); codeBuild.AppendLine("_obj." + field.surfaceFieldName + " = String.Join(\",\", lst" + field.surfaceFieldName + ".Select(x => x.Value).ToArray());"); codeBuild.AppendLine("// **** Multi-Picklist: " + field.surfaceFieldName + " END *****"); break; #endregion #region Date case pNums.FieldType.Date: codeBuild.AppendLine("// **** Date Picker: " + field.surfaceFieldName + " *****"); codeBuild.AppendLine("if (" + field.surfaceFieldName + ".Text != String.Empty)"); if (field.surfaceDateTypeId == pNums.SurfaceDateType.Year.GetHashCode()) codeBuild.AppendLine("_obj." + field.surfaceFieldName + " = new DateTime(int.Parse(" + field.surfaceFieldName + ".Text), 1, 1);"); else codeBuild.AppendLine("_obj." + field.surfaceFieldName + " = utils.formatStringToDate(" + field.surfaceFieldName + ".Text);"); codeBuild.AppendLine("// **** Date Picker: " + field.surfaceFieldName + " END *****"); break; #endregion #region Time case pNums.FieldType.Time: codeBuild.AppendLine("// **** Clock Picker: " + field.surfaceFieldName + " *****"); codeBuild.AppendLine("if (" + field.surfaceFieldName + ".Text != String.Empty)"); codeBuild.AppendLine("_obj." + field.surfaceFieldName + " = utils.formatStringToTime(" + field.surfaceFieldName + ".Text);"); codeBuild.AppendLine("// **** Clock Picker: " + field.surfaceFieldName + " END *****"); break; #endregion #region Checkbox case pNums.FieldType.Checkbox: codeBuild.AppendLine("// **** Checkbox: " + field.surfaceFieldName + " *****"); codeBuild.AppendLine("_obj." + field.surfaceFieldName + " = " + field.surfaceFieldName + ".Checked;"); codeBuild.AppendLine("// **** Checkbox: " + field.surfaceFieldName + " END *****"); break; #endregion #region RadioButtonList case pNums.FieldType.RadioButtonList: codeBuild.AppendLine("// **** RadioButtonList: " + field.surfaceFieldName + " *****"); if (field.isCustomSource) { codeBuild.AppendLine("_obj." + field.surfaceFieldName + " = " + field.surfaceFieldName + ".SelectedValue;"); } else if (field.relationalObject.Length > 0 && field.relationalObject != "0") { codeBuild.AppendLine("_obj." + field.surfaceFieldName + " = " + field.surfaceFieldName + ".SelectedValue;"); } else { codeBuild.AppendLine("if (" + field.surfaceFieldName + ".SelectedValue != String.Empty)"); codeBuild.AppendLine("_obj." + field.surfaceFieldName + " = int.Parse(" + field.surfaceFieldName + ".SelectedValue);"); } codeBuild.AppendLine("// **** RadioButtonList: " + field.surfaceFieldName + " END *****"); break; #endregion #region Caption case pNums.FieldType.Caption: codeBuild.AppendLine("// **** Caption: " + field.surfaceFieldName + " *****"); codeBuild.AppendLine("_obj." + field.surfaceFieldName + " = " + field.surfaceFieldName + ".Text;"); codeBuild.AppendLine("// **** Caption: " + field.surfaceFieldName + " END *****"); break; #endregion //#region Content //case pNums.FieldType.Content: // codeBuild.AppendLine("// **** Content: " + field.surfaceFieldName + " *****"); // codeBuild.AppendLine("_obj." + field.surfaceFieldName + " = " + field.contentId.ToString() + ";"); // codeBuild.AppendLine("// **** Content: " + field.surfaceFieldName + " END *****"); // break; //#endregion #region FormulaField case pNums.FieldType.FormulaField: //codeBuild.AppendLine("// **** FormulaField: " + field.surfaceFieldName + " *****"); //codeBuild.AppendLine("if (" + field.surfaceFieldName + ".Text != String.Empty)"); //codeBuild.AppendLine("_obj." + field.surfaceFieldName + " = decimal.Parse(" + field.surfaceFieldName + ".Text);"); //codeBuild.AppendLine("// **** FormulaField: " + field.surfaceFieldName + " END *****"); break; #endregion #region Address case pNums.FieldType.Address: codeBuild.AppendLine("// **** Address: " + field.surfaceFieldName + " *****"); codeBuild.AppendLine("TextBox txtAddress" + field.surfaceFieldName + "1 = (TextBox)pnlSurfaceForm.FindControl(\"" + field.surfaceFieldName + "1\");"); codeBuild.AppendLine("TextBox txtAddress" + field.surfaceFieldName + "2 = null;"); codeBuild.AppendLine("txtAddress" + field.surfaceFieldName + "2 = (TextBox)pnlSurfaceForm.FindControl(\"" + field.surfaceFieldName + "2\");"); codeBuild.AppendLine("TextBox txtAddress" + field.surfaceFieldName + "3 = (TextBox)pnlSurfaceForm.FindControl(\"" + field.surfaceFieldName + "3\");"); codeBuild.AppendLine("TextBox txtAddress" + field.surfaceFieldName + "4 = (TextBox)pnlSurfaceForm.FindControl(\"" + field.surfaceFieldName + "4\");"); codeBuild.AppendLine("TextBox txtAddress" + field.surfaceFieldName + "5 = (TextBox)pnlSurfaceForm.FindControl(\"" + field.surfaceFieldName + "5\");"); codeBuild.AppendLine("TextBox txtAddress" + field.surfaceFieldName + "6 = (TextBox)pnlSurfaceForm.FindControl(\"" + field.surfaceFieldName + "6\");"); codeBuild.AppendLine("string addressFull" + field.surfaceFieldName + " = string.Empty;"); codeBuild.AppendLine("if (txtAddress" + field.surfaceFieldName + "1 != null)"); codeBuild.AppendLine("addressFull" + field.surfaceFieldName + " += \"~1~\" + txtAddress" + field.surfaceFieldName + "1.Text + \"~|~\";"); codeBuild.AppendLine("else"); codeBuild.AppendLine("addressFull" + field.surfaceFieldName + " += \"~|~\";"); codeBuild.AppendLine("if (txtAddress" + field.surfaceFieldName + "2 != null)"); codeBuild.AppendLine("addressFull" + field.surfaceFieldName + " += \"~2~\" + txtAddress" + field.surfaceFieldName + "2.Text + \"~|~\";"); codeBuild.AppendLine("else"); codeBuild.AppendLine("addressFull" + field.surfaceFieldName + " += \"~|~\";"); codeBuild.AppendLine("if (txtAddress" + field.surfaceFieldName + "3 != null)"); codeBuild.AppendLine("addressFull" + field.surfaceFieldName + " += \"~3~\" + txtAddress" + field.surfaceFieldName + "3.Text + \"~|~\";"); codeBuild.AppendLine("else"); codeBuild.AppendLine("addressFull" + field.surfaceFieldName + " += \"~|~\";"); codeBuild.AppendLine("if (txtAddress" + field.surfaceFieldName + "4 != null)"); codeBuild.AppendLine("addressFull" + field.surfaceFieldName + " += \"~4~\" + txtAddress" + field.surfaceFieldName + "4.Text + \"~|~\";"); codeBuild.AppendLine("else"); codeBuild.AppendLine("addressFull" + field.surfaceFieldName + " += \"~|~\";"); codeBuild.AppendLine("if (txtAddress" + field.surfaceFieldName + "5 != null){"); codeBuild.AppendLine("if (txtAddress" + field.surfaceFieldName + "5.Text == String.Empty)"); codeBuild.AppendLine("addressFull" + field.surfaceFieldName + " += \"~5~South Africa~|~\";"); codeBuild.AppendLine("else"); codeBuild.AppendLine("addressFull" + field.surfaceFieldName + " += \"~5~\" + txtAddress" + field.surfaceFieldName + "5.Text + \"~|~\";"); codeBuild.AppendLine("}"); codeBuild.AppendLine("else{"); codeBuild.AppendLine("addressFull" + field.surfaceFieldName + " += \"~|~\";"); codeBuild.AppendLine("}"); codeBuild.AppendLine("if (txtAddress" + field.surfaceFieldName + "6 != null)"); codeBuild.AppendLine("addressFull" + field.surfaceFieldName + " += \"~6~\" + txtAddress" + field.surfaceFieldName + "6.Text;"); codeBuild.AppendLine(" //remove the last \"~|~\" if line 4 is empty"); codeBuild.AppendLine("if (addressFull" + field.surfaceFieldName + ".Substring(addressFull" + field.surfaceFieldName + ".Length - 4).Equals(\"~|~\") && addressFull" + field.surfaceFieldName + ".Length > 4)"); codeBuild.AppendLine("addressFull" + field.surfaceFieldName + " = addressFull" + field.surfaceFieldName + ".Substring(0, addressFull" + field.surfaceFieldName + ".Length - 4);"); codeBuild.AppendLine("_obj." + field.surfaceFieldName + " = addressFull" + field.surfaceFieldName + ";"); codeBuild.AppendLine("// **** Address: " + field.surfaceFieldName + " END *****"); break; #endregion #region CheckboxList case pNums.FieldType.CheckboxList: //CVH 2017-08-23 Catering for a checkboxlist being a checkboxlist, vs a div with a number of checkboxes (alternateview vs not I think) codeBuild.AppendLine("// **** CheckboxList: " + field.surfaceFieldName + " *****"); codeBuild.AppendLine("string lst" + field.surfaceFieldName + " = String.Empty;"); if (field.alternateView) { codeBuild.AppendLine("foreach (ListItem item in " + field.surfaceFieldName + ".Items)"); codeBuild.AppendLine("{"); codeBuild.AppendLine("if (item.Selected)"); codeBuild.AppendLine("{"); codeBuild.AppendLine("if (lst" + field.surfaceFieldName + " == String.Empty)"); codeBuild.AppendLine("lst" + field.surfaceFieldName + " = item.Value;"); codeBuild.AppendLine("else"); codeBuild.AppendLine("lst" + field.surfaceFieldName + " += \",\" + item.Value;"); codeBuild.AppendLine("}"); codeBuild.AppendLine("}"); } else { codeBuild.AppendLine("foreach (Control ctl in " + field.surfaceFieldName + ".Controls)"); codeBuild.AppendLine("{"); codeBuild.AppendLine("if(ctl.GetType() == typeof(CheckBox))"); codeBuild.AppendLine("{"); codeBuild.AppendLine("if(((CheckBox)ctl).Checked)"); codeBuild.AppendLine("{"); codeBuild.AppendLine("if(lst" + field.surfaceFieldName + " == String.Empty)"); codeBuild.AppendLine("lst" + field.surfaceFieldName + " = ctl.ID.Replace(\"" + field.surfaceFieldName + "_\", \"\");"); codeBuild.AppendLine("else"); codeBuild.AppendLine("lst" + field.surfaceFieldName + " += \",\" + ctl.ID.Replace(\"" + field.surfaceFieldName + "_\", \"\");"); codeBuild.AppendLine("}"); codeBuild.AppendLine("}"); codeBuild.AppendLine("}"); } codeBuild.AppendLine("_obj." + field.surfaceFieldName + " = lst" + field.surfaceFieldName + ";"); codeBuild.AppendLine("// **** CheckboxList: " + field.surfaceFieldName + " END *****"); break; #endregion #region Image case pNums.FieldType.Image: codeBuild.AppendLine("// **** Image: " + field.surfaceFieldName + " *****"); codeBuild.AppendLine("if (" + field.surfaceFieldName + ".UploadedFiles.Count > 0)"); codeBuild.AppendLine("{"); codeBuild.AppendLine("foreach (UploadedFile file in " + field.surfaceFieldName + ".UploadedFiles)"); codeBuild.AppendLine("{"); codeBuild.AppendLine("string ext = " + field.surfaceFieldName + ".UploadedFiles[0].GetExtension();"); codeBuild.AppendLine("string newfilename = Guid.NewGuid().ToString() + ext;"); codeBuild.AppendLine("string tempPath = Server.MapPath(\"~/upload/temp/\") + newfilename;"); codeBuild.AppendLine("string destDir = Server.MapPath(\"~/upload/surface/\" + _surfaceItem.recId.ToString() + \"/\");"); codeBuild.AppendLine("utils.validateFolder(Server.MapPath(\"~/upload/temp/\"));"); codeBuild.AppendLine("utils.validateFolder(destDir);"); codeBuild.AppendLine("_obj." + field.surfaceFieldName + " = _surfaceItem.recId + \"/\" + newfilename; "); codeBuild.AppendLine("file.SaveAs(tempPath);"); codeBuild.AppendLine("utils.ResizeImageMaxWidth(tempPath, destDir, newfilename, true, true, 800);"); codeBuild.AppendLine("HtmlGenericControl imageDiv = (HtmlGenericControl)pnlSurfaceForm.FindControl(\"" + field.surfaceFieldName + "Div\");"); codeBuild.AppendLine("if (imageDiv != null)"); codeBuild.AppendLine("{"); codeBuild.AppendLine("string imageUrl = \"/upload/surface/\" + _surfaceItem.recId + \"/\" + newfilename;"); codeBuild.AppendLine("imageDiv.Style.Add(\"background-image\", \"url(\" + imageUrl + \")\");"); codeBuild.AppendLine("}"); codeBuild.AppendLine("}"); codeBuild.AppendLine("}"); codeBuild.AppendLine("// **** Image: " + field.surfaceFieldName + " END *****"); break; #endregion #region Button case pNums.FieldType.Button: codeBuild.AppendLine("// **** Button: " + field.surfaceFieldName + " *****"); codeBuild.AppendLine("_obj." + field.surfaceFieldName + " = \"" + field.surfaceFieldDisplay + "\";"); codeBuild.AppendLine("// **** Button: " + field.surfaceFieldName + " END *****"); break; #endregion #region BarcodeScanner case pNums.FieldType.BarcodeScanner: codeBuild.AppendLine("// **** BarcodeScanner: " + field.surfaceFieldName + " *****"); codeBuild.AppendLine("_obj." + field.surfaceFieldName + " = " + field.surfaceFieldName + ".Text;"); codeBuild.AppendLine("// **** BarcodeScanner: " + field.surfaceFieldName + " END *****"); break; #endregion } } } codeBuild.AppendLine("//Handle any custom control saving here... TO DO"); codeBuild.AppendLine("if(_obj.recId > 0)//update"); codeBuild.AppendLine("{"); codeBuild.AppendLine("result = xData.UpdateTyped(\"recId\", _obj.recId.ToString(), typeof(" + objectName + "), _obj, \"publ_\", false);"); codeBuild.AppendLine("}"); codeBuild.AppendLine("else//save"); codeBuild.AppendLine("{"); codeBuild.AppendLine("_obj.recId = xData.SaveTyped(\"recId\", typeof(" + objectName + "), _obj, \"publ_\", false);"); codeBuild.AppendLine("if(_obj.recId > 0)"); codeBuild.AppendLine("result = true;"); codeBuild.AppendLine("}"); codeBuild.AppendLine("base.Entity = _obj;"); generatedCode = codeBuild.ToString(); } catch (Exception ex) { exception.HandleException("surfaceHandler:", MethodBase.GetCurrentMethod().Name, ex, HttpContext.Current.Session["user"]); } } /// /// Build The select columns for the published Surface Apps Grid /// /// /// public static string BuildPublishedSelectColumns(int surfaceId, bool allFields, bool showAllActiveFields = false) { string result = String.Empty; try { string query = String.Empty; if (allFields) { //CVH 2017-09-19 Add type Placeholder to exclusion list (no column created for Placeholders in published table) query = "Select sf.* from pal_SurfaceField sf where sf.surfaceFieldTypeId NOT IN (1,2,16,11,19) " + " and sf.isActive = 1 and isHidden = 0 and sf.surfaceId = " + surfaceId + " " + " order by sf.gridSequence"; } else { query = "Select sf.* from pal_SurfaceField sf where sf.surfaceFieldTypeId NOT IN (1,2,16,11,19) " + " and sf.isActive = 1 and sf.surfaceId = " + surfaceId + " and (sf.isGrid = 1 or sf.isFilter = 1 or sf.surfaceFieldName = 'ParentSurfaceItemId' or sf.isGrouped = 1) " + " order by sf.gridSequence"; } //DP 2019-12-23 Showing all the active fields regardless of hidden or being filters if (showAllActiveFields) { query = "Select sf.* from pal_SurfaceField sf where sf.surfaceFieldTypeId NOT IN (1,2,16,11,19) " + " and sf.isActive = 1 and sf.surfaceId = " + surfaceId + " " + " order by sf.gridSequence"; } DataTable fields = xData.GetCustomTypedTable(query); StringBuilder colBuilder = new StringBuilder(); foreach (oSurfaceField fld in utils.ConvertDataTableToList(fields, typeof(oSurfaceField))) { if (!fld.surfaceFieldName.StartsWith("_")) { pNums.FieldType typ = (pNums.FieldType)Enum.ToObject(typeof(pNums.FieldType), fld.surfaceFieldTypeId); if (colBuilder.Length > 1) { colBuilder.Append(","); } switch (typ) { case pNums.FieldType.Picklist: if (fld.isCustomSource && fld.relationalObject != String.Empty) { string tableName = string.Empty; string fieldName = string.Empty; if (fld.relationalObject == "pal_User") { tableName = "pal_vUserShared"; fieldName = "userDisplay"; } else { tableName = fld.relationalObject; String[] flds = fld.relationalFields.Split(char.Parse(",")); foreach (string f in flds) { if (fieldName == String.Empty) fieldName = f; else fieldName += " + ' ' + " + f; } } colBuilder.Append("(SELECT Top 1 " + fieldName + " FROM " + tableName + " WHERE " + fld.relationalValues + " = ISNULL(publ.[" + fld.surfaceFieldName + "],''))[" + fld.surfaceFieldName + "]"); } else if (fld.relationalObject.Length > 0 && fld.relationalObject == "oSurface") { colBuilder.Append("publ.[" + fld.surfaceFieldName + "]"); } else if (fld.relationalObject.Length > 0 && fld.relationalObject != "0") { string valueField = string.Empty; string displayField = string.Empty; DataTable dtModule = xData.GetTypedByCriteriaSpecificTable("recId", typeof(oModule), "objectName", fld.relationalObject); foreach (DataRow row in dtModule.Rows) { valueField = row["valueField"].ToString(); displayField = row["displayField"].ToString(); } colBuilder.Append("(SELECT Top 1 " + valueField + " FROM pal_" + fld.relationalObject.Substring(1) + " WHERE " + displayField + " = ISNULL(publ.[" + fld.surfaceFieldName + "],0))[" + fld.surfaceFieldName + "]"); } else if (fld.relationalObject == String.Empty || fld.relationalObject == "0") { colBuilder.Append("(Select display FROM pal_SurfaceLookup where recId = ISNULL(publ.[" + fld.surfaceFieldName + "],0))[" + fld.surfaceFieldName + "]"); } else { colBuilder.Append("publ.[" + fld.surfaceFieldName + "]"); } break; case pNums.FieldType.RadioButtonList: if (fld.isCustomSource && fld.relationalObject != String.Empty) { string tableName = string.Empty; string fieldName = string.Empty; if (fld.relationalObject == "pal_User") { tableName = "pal_vUserShared"; fieldName = "userDisplay"; } else { tableName = fld.relationalObject; String[] flds = fld.relationalFields.Split(char.Parse(",")); foreach (string f in flds) { if (fieldName == String.Empty) fieldName = f; else fieldName += " + ' ' + " + f; } } colBuilder.Append("(SELECT Top 1 " + fieldName + " FROM " + tableName + " WHERE " + fld.relationalValues + " = ISNULL(publ.[" + fld.surfaceFieldName + "],''))[" + fld.surfaceFieldName + "]"); } else if (fld.relationalObject.Length > 0 && fld.relationalObject != "0") { string valueField = string.Empty; string displayField = string.Empty; DataTable dtModule = xData.GetTypedByCriteriaSpecificTable("recId", typeof(oModule), "objectName", fld.relationalObject); foreach (DataRow row in dtModule.Rows) { valueField = row["valueField"].ToString(); displayField = row["displayField"].ToString(); } colBuilder.Append("(SELECT Top 1 " + valueField + " FROM pal_" + fld.relationalObject.Substring(1) + " WHERE " + displayField + " = ISNULL(publ.[" + fld.surfaceFieldName + "],0))[" + fld.surfaceFieldName + "]"); } else if (fld.relationalObject == String.Empty || fld.relationalObject == "0") { colBuilder.Append("(Select display FROM pal_SurfaceLookup where recId = ISNULL(publ.[" + fld.surfaceFieldName + "],0))[" + fld.surfaceFieldName + "]"); } else { colBuilder.Append("publ.[" + fld.surfaceFieldName + "]"); } break; case pNums.FieldType.MultiPicklist: if (fld.isCustomSource && fld.relationalObject != String.Empty) { string tableName = string.Empty; string fieldName = string.Empty; if (fld.relationalObject == "pal_User") { tableName = "pal_vUserShared"; fieldName = "userDisplay"; } else { tableName = fld.relationalObject; String[] flds = fld.relationalFields.Split(char.Parse(",")); foreach (string f in flds) { if (fieldName == String.Empty) fieldName = f; else fieldName += " + ' ' + " + f; } } colBuilder.Append("(STUFF((SELECT ',' + cast(" + fieldName + " as varchar) FROM " + tableName + " WHERE " + fld.relationalValues + " IN(SELECT splitdata FROM dbo.SplitString(ISNULL(publ.[" + fld.surfaceFieldName + "],''), ',')) FOR XML PATH('')), 1, 1, ''))[" + fld.surfaceFieldName + "]"); } else { colBuilder.Append("(STUFF((SELECT ',' + cast(Display as varchar) FROM pal_SurfaceLookup L WHERE recId IN(SELECT splitdata FROM dbo.SplitString([" + fld.surfaceFieldName + "], ',')) AND categoryId = " + fld.lookupCategory + " FOR XML PATH('')), 1, 1, ''))[" + fld.surfaceFieldName + "]"); } break; case pNums.FieldType.CheckboxList: if (fld.isCustomSource && fld.relationalObject != String.Empty) { string tableName = string.Empty; string fieldName = string.Empty; if (fld.relationalObject == "pal_User") { tableName = "pal_vUserShared"; fieldName = "userDisplay"; } else { tableName = fld.relationalObject; String[] flds = fld.relationalFields.Split(char.Parse(",")); foreach (string f in flds) { if (fieldName == String.Empty) fieldName = f; else fieldName += " + ' ' + " + f; } } colBuilder.Append("(STUFF((SELECT ',' + " + fieldName + " FROM " + tableName + " WHERE " + fld.relationalValues + " IN(SELECT splitdata FROM dbo.SplitString(ISNULL(publ.[" + fld.surfaceFieldName + "],''), ',')) FOR XML PATH('')), 1, 1, ''))[" + fld.surfaceFieldName + "]"); } else { colBuilder.Append("(STUFF((SELECT ',' + Display FROM pal_SurfaceLookup L WHERE recId IN(SELECT splitdata FROM dbo.SplitString([" + fld.surfaceFieldName + "], ',')) AND categoryId = " + fld.lookupCategory + " FOR XML PATH('')), 1, 1, ''))[" + fld.surfaceFieldName + "]"); } break; //case pNums.FieldType.Content: // colBuilder.Append("(Select title FROM pal_Content where recId = ISNULL(publ.[" + fld.surfaceFieldName + "],0))[" + fld.surfaceFieldName + "]"); // break; case pNums.FieldType.Date: if (fld.surfaceDateTypeId == pNums.SurfaceDateType.Year.GetHashCode()) { colBuilder.Append("YEAR(publ.[" + fld.surfaceFieldName + "])[" + fld.surfaceFieldName + "] "); } else colBuilder.Append("publ.[" + fld.surfaceFieldName + "]"); break; default: colBuilder.Append("publ.[" + fld.surfaceFieldName + "]"); break; } } } result = colBuilder.ToString(); } catch (Exception ex) { exception.HandleException("surfaceHandler:", MethodBase.GetCurrentMethod().Name, ex, HttpContext.Current.Session["user"]); } return result; } /// /// Determines whether label source is a time field type, then used to format in time format /// /// private static bool LabelSourceIsTime(oSurfaceField labelField) { bool isTime = false; try { int relationalId = 0; if (Int32.TryParse(labelField.relationalSurface.ToString(), out relationalId)) { foreach (oSurfaceField sourceField in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceField), "surfaceId,recId", relationalId.ToString() + "," + labelField.relationalFields.ToString())) { if (sourceField.surfaceFieldTypeId == pNums.FieldType.Time.GetHashCode()) isTime = true; break; } } } catch (Exception ex) { exception.HandleException("surfaceHandler:", MethodBase.GetCurrentMethod().Name, ex, HttpContext.Current.Session["user"]); } return isTime; } public static bool ImportFabricDetails(DataTable sourcedata, int surfaceId) { bool result = false; try { if (surfaceId != 3043) return false; foreach (DataRow drow in sourcedata.Rows) { oAdminFabricDetails _obj = new oAdminFabricDetails(); _obj.surfaceId = surfaceId; _obj.isActive = true; string qeury = $@"Select ItemId,RecId,FabricDetails_FabricDetails_FabricID FROM publ_AdminFabricDetails WHERE FabricDetails_FabricDetails_Category='{drow["Category"]}' And FabricDetails_FabricDetails_Type ='{drow["Type"]}' And FabricDetails_FabricDetails_QualityReference='{drow["Quality_Reference"]}'"; var dtSurfaceData = xData.GetCustomTypedTable(qeury); if (dtSurfaceData?.Rows.Count > 0) { _obj.FabricDetails_FabricDetails_FabricID = Convert.ToInt32(dtSurfaceData.Rows[0]["FabricDetails_FabricDetails_FabricID"]); _obj.recId = Convert.ToInt32(dtSurfaceData.Rows[0]["recId"]); _obj.itemID = Convert.ToInt32(dtSurfaceData.Rows[0]["ItemId"]); } else { oSurfaceItem item = new oSurfaceItem(); item.surfaceId = surfaceId; item.isActive = true; item.isDeleted = false; item.dateCreated = DateTime.Now; item.createdBy = -1; item.recId = xData.SaveTyped("recId", typeof(oSurfaceItem), item); _obj.itemID = item.recId; string query = $"select ISNULL(MAX(isnull(FabricDetails_FabricDetails_FabricID,0)),100001) as FabricDetails_FabricDetails_FabricID from publ_AdminFabricDetails"; var fabricIdData = xData.GetCustomTypedTable(query); if (fabricIdData?.Rows.Count > 0) { _obj.FabricDetails_FabricDetails_FabricID = Convert.ToInt32(fabricIdData.Rows[0]["FabricDetails_FabricDetails_FabricID"]) + 1; } else { _obj.FabricDetails_FabricDetails_FabricID = 0; } } _obj.FabricDetails_FabricDetails_Category = drow["Category"].ToString(); _obj.FabricDetails_FabricDetails_Type = drow["Type"].ToString(); _obj.FabricDetails_FabricDetails_QualityReference = drow["Quality_Reference"].ToString(); _obj.FabricDetails_FabricDetails_Description = Convert.ToString(drow["Description"]); _obj.FabricDetails_FabricDetails_Active = Convert.ToBoolean(drow["Active"]); if (_obj.recId > 0)//update { result = xData.UpdateTyped("recId", _obj.recId.ToString(), typeof(oAdminFabricDetails), _obj, "publ_", false); } else//save { _obj.recId = xData.SaveTyped("recId", typeof(oAdminFabricDetails), _obj, "publ_", false); } } result = true; } catch (Exception ex) { exception.HandleException("surfaceHandler:", MethodBase.GetCurrentMethod().Name, ex, null); } return result; } public static bool ImportTrimDetails(DataTable sourcedata, int surfaceId) { bool result = false; try { if (surfaceId != 3048) return false; foreach (DataRow drow in sourcedata.Rows) { oAdminTrimDetails _obj = new oAdminTrimDetails(); _obj.surfaceId = surfaceId; _obj.isActive = true; string qeury = $@"Select ItemId,RecId,TrimDetails_TrimDetails_TrimID FROM publ_AdminTrimDetails WHERE TrimDetails_TrimDetails_Category='{drow["Category"]}' And TrimDetails_TrimDetails_Type ='{drow["Type"]}' And TrimDetails_TrimDetails_QualityReference='{drow["Quality_Reference"]}'"; var dtSurfaceData = xData.GetCustomTypedTable(qeury); if (dtSurfaceData?.Rows.Count > 0) { _obj.TrimDetails_TrimDetails_TrimID = Convert.ToInt32(dtSurfaceData.Rows[0]["TrimDetails_TrimDetails_TrimID"]); _obj.recId = Convert.ToInt32(dtSurfaceData.Rows[0]["recId"]); _obj.itemID = Convert.ToInt32(dtSurfaceData.Rows[0]["ItemId"]); } else { oSurfaceItem item = new oSurfaceItem(); item.surfaceId = surfaceId; item.isActive = true; item.isDeleted = false; item.dateCreated = DateTime.Now; item.createdBy = -1; item.recId = xData.SaveTyped("recId", typeof(oSurfaceItem), item); _obj.itemID = item.recId; string query = $"select ISNULL(MAX(isnull(TrimDetails_TrimDetails_TrimID,0)),100001) as TrimDetails_TrimDetails_TrimID from publ_AdminTrimDetails"; var trimIdData = xData.GetCustomTypedTable(query); if (trimIdData?.Rows.Count > 0) { _obj.TrimDetails_TrimDetails_TrimID = Convert.ToInt32(trimIdData.Rows[0]["TrimDetails_TrimDetails_TrimID"]) + 1; } else { _obj.TrimDetails_TrimDetails_TrimID = 0; } } _obj.TrimDetails_TrimDetails_Category = drow["Category"].ToString(); _obj.TrimDetails_TrimDetails_Type = drow["Type"].ToString(); _obj.TrimDetails_TrimDetails_QualityReference = drow["Quality_Reference"].ToString(); _obj.TrimDetails_TrimDetails_Description = Convert.ToString(drow["Description"]); _obj.TrimDetails_TrimDetails_Active = Convert.ToBoolean(drow["Active"]); if (_obj.recId > 0)//update { result = xData.UpdateTyped("recId", _obj.recId.ToString(), typeof(oAdminTrimDetails), _obj, "publ_", false); } else//save { _obj.recId = xData.SaveTyped("recId", typeof(oAdminTrimDetails), _obj, "publ_", false); } } result = true; } catch (Exception ex) { exception.HandleException("surfaceHandler:", MethodBase.GetCurrentMethod().Name, ex, null); } return result; } public static bool ImportZipDetails(DataTable sourcedata, int surfaceId) { bool result = false; try { if (surfaceId != 3051) return false; foreach (DataRow drow in sourcedata.Rows) { oAdminZipDetails _obj = new oAdminZipDetails(); _obj.surfaceId = surfaceId; _obj.isActive = true; string qeury = $@"Select ItemId,RecId,ZipDetails_ZipDetails_ZipID FROM publ_AdminZipDetails WHERE ZipDetails_ZipDetails_Category='{drow["Category"]}' And ZipDetails_ZipDetails_Type ='{drow["Type"]}' And ZipDetails_ZipDetails_QualityReference='{drow["Quality_Reference"]}'"; var dtSurfaceData = xData.GetCustomTypedTable(qeury); if (dtSurfaceData?.Rows.Count > 0) { _obj.ZipDetails_ZipDetails_ZipID = Convert.ToInt32(dtSurfaceData.Rows[0]["ZipDetails_ZipDetails_ZipID"]); _obj.recId = Convert.ToInt32(dtSurfaceData.Rows[0]["recId"]); _obj.itemID = Convert.ToInt32(dtSurfaceData.Rows[0]["ItemId"]); } else { oSurfaceItem item = new oSurfaceItem(); item.surfaceId = surfaceId; item.isActive = true; item.isDeleted = false; item.dateCreated = DateTime.Now; item.createdBy = -1; item.recId = xData.SaveTyped("recId", typeof(oSurfaceItem), item); _obj.itemID = item.recId; string query = $"select ISNULL(MAX(isnull(ZipDetails_ZipDetails_ZipID,0)),100001) as ZipDetails_ZipDetails_ZipID from publ_AdminZipDetails"; var zipIdData = xData.GetCustomTypedTable(query); if (zipIdData?.Rows.Count > 0) { _obj.ZipDetails_ZipDetails_ZipID = Convert.ToInt32(zipIdData.Rows[0]["ZipDetails_ZipDetails_ZipID"]) + 1; } else { _obj.ZipDetails_ZipDetails_ZipID = 0; } } _obj.ZipDetails_ZipDetails_Category = drow["Category"].ToString(); _obj.ZipDetails_ZipDetails_Type = drow["Type"].ToString(); _obj.ZipDetails_ZipDetails_QualityReference = drow["Quality_Reference"].ToString(); _obj.ZipDetails_ZipDetails_Description = Convert.ToString(drow["Description"]); _obj.ZipDetails_ZipDetails_Active = Convert.ToBoolean(drow["Active"]); if (_obj.recId > 0)//update { result = xData.UpdateTyped("recId", _obj.recId.ToString(), typeof(oAdminZipDetails), _obj, "publ_", false); } else//save { _obj.recId = xData.SaveTyped("recId", typeof(oAdminZipDetails), _obj, "publ_", false); } } result = true; } catch (Exception ex) { exception.HandleException("surfaceHandler:", MethodBase.GetCurrentMethod().Name, ex, null); } return result; } } }