using framework_business; using framework_library; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; using System.Reflection; using System.Text; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; public partial class controls_module_surfaceDrawing : System.Web.UI.UserControl, ISurfaceControlBase { #region override /// /// Reload Control /// /// /// /// public void ReloadControl(oSurfaceFieldData controlFieldData, bool alternateView = false, bool readOnly = false) { try { try { //Setup validation group ISurfaceBase parent = (ISurfaceBase)this.NamingContainer; string parentName = parent.AppRelativeVirtualPath; int iLastIndex = parentName.LastIndexOf("/") + 1; string validate = parentName.Substring(iLastIndex).Replace("_form.ascx", ""); if (handler.ReturnSetup().code != "SHOU-1") { btnAddDrawing.ValidationGroup = validate; } } catch { } _SurfaceDrawing.itemId = controlFieldData.surfaceItemId; foreach (oSurfaceField field in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceField), "recId", controlFieldData.surfaceFieldID.ToString())) { _SurfaceDrawing.fieldId = field.recId; break; } if (_SurfaceDrawing.itemId > 0) { foreach (oSurfaceDrawing drw in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceDrawing), "fieldId,itemId", _SurfaceDrawing.fieldId + "," + _SurfaceDrawing.itemId)) { _SurfaceDrawing = drw; break; } } PopulateDrawingControl(); } catch (Exception ex) { exception.HandleException("SurfaceDrawing:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } } /// /// Save Control Data /// /// public void SaveControlData(ref oSurfaceFieldData _surfaceFieldData) { try { SaveDrawingControlValues(); if (_SurfaceDrawing.recId > 0) { if (xData.UpdateTyped("recId", _SurfaceDrawing.recId.ToString(), typeof(oSurfaceDrawing), _SurfaceDrawing)) { } } else { _SurfaceDrawing.recId = xData.SaveTyped("recId", typeof(oSurfaceDrawing), _SurfaceDrawing); if (_SurfaceDrawing.recId > 0) { } } } catch (Exception ex) { exception.HandleException("SurfaceDrawing:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } } #endregion #region Methods /// /// Populate Drawing Control /// private void PopulateDrawingControl() { try { //fetch configurtaion oSurfaceDrawingConfig _config = new oSurfaceDrawingConfig(); foreach (oSurfaceDrawingConfig conf in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceDrawingConfig), "fieldId", _SurfaceDrawing.fieldId.ToString())) { _config = conf; break; } //signature image handling if (_SurfaceDrawing.drawingFile != String.Empty) { imgDrawing.ImageUrl = "~/upload/" + _SurfaceDrawing.drawingFile; btnAddDrawing.Visible = true; btnAddDrawing.CssClass = "glyphicon glyphicon-edit palette-edit-light"; btnAddDrawing.Attributes.Add("title", "Edit Drawing"); btnStartOver.Visible = true; } else if (_config.placeholder != String.Empty) { imgDrawing.ImageUrl = "~/upload/" + _config.placeholder; btnAddDrawing.Visible = true; btnStartOver.Visible = false; btnAddDrawing.Attributes.Add("title", "Add Drawing"); } else { btnAddDrawing.Visible = true; btnStartOver.Visible = false; } } catch (Exception ex) { exception.HandleException("surfaceSignature:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } } /// /// Save Drawing Values /// private void SaveDrawingControlValues() { try { _SurfaceDrawing.isActive = true; } catch (Exception ex) { exception.HandleException("surfaceDrawing:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } } /// /// Open Drawing Pad /// private void OpenDrawingPad() { try { //fetch configurtaion oSurfaceDrawingConfig _config = new oSurfaceDrawingConfig(); foreach (oSurfaceDrawingConfig conf in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceDrawingConfig), "fieldId", _SurfaceDrawing.fieldId.ToString())) { _config = conf; break; } ISurfaceBase parent = (ISurfaceBase)this.NamingContainer; if (_SurfaceDrawing.itemId == 0) { // If this is a new property, we need to save the gallery top down (Parent => Gallery) parent.SaveControl(false, false, false); } //update size and background //TO DO if (_SurfaceDrawing.drawingFile != String.Empty) palDraw.Attributes.Add("style", "background-image:url(/upload/" + _SurfaceDrawing.drawingFile + ");width:" + _config.placeHolderW + "px;height:" + _config.placeHolderH + "px;"); else palDraw.Attributes.Add("style", "background-image:url(/upload/" + _config.placeholder + ");width:" + _config.placeHolderW + "px;;height:" + _config.placeHolderH + "px;"); upSurfaceDrawingPad.Update(); string scriptVar = "$('#" + pnlDrawingModal.ClientID + "').closest('div').find('.modDrawingModal').modal(); SetupDrawing('" + palDraw.ClientID + "', " + _config.placeHolderW + ", '" + _config.placeHolderH + "')"; ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "mySurfaceDrawingModal", scriptVar, true); } catch (Exception ex) { exception.HandleException("surfaceDrawing:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } } #endregion #region events /// /// Page Load Event /// /// /// protected void Page_Load(object sender, EventArgs e) { } /// /// Add Drawing Button /// /// /// protected void btnAddDrawing_Click(object sender, EventArgs e) { try { OpenDrawingPad(); } catch (Exception ex) { exception.HandleException("surfaceSignature:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } } /// /// Start Over /// /// /// protected void btnStartOver_Click(object sender, EventArgs e) { try { //fetch configurtaion oSurfaceDrawingConfig _config = new oSurfaceDrawingConfig(); foreach (oSurfaceDrawingConfig conf in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceDrawingConfig), "fieldId", _SurfaceDrawing.fieldId.ToString())) { _config = conf; break; } _SurfaceDrawing.drawingFile = _config.placeholder; OpenDrawingPad(); } catch (Exception ex) { exception.HandleException("surfaceSignature:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } } /// /// Save the Drawning /// /// /// protected void lnklSaveDrawing_Click(object sender, EventArgs e) { try { //fetch configurtaion oSurfaceDrawingConfig _config = new oSurfaceDrawingConfig(); foreach (oSurfaceDrawingConfig conf in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceDrawingConfig), "fieldId", _SurfaceDrawing.fieldId.ToString())) { _config = conf; break; } string drawingFolder = "surface/"; drawingFolder += _SurfaceDrawing.itemId; string randomFileName = utils.RandomString(9, true) + "_" + DateTime.Now.ToString("yyyy-MM-dd-HH-mm") + ".png"; string filePath = Server.MapPath("~/upload/" + drawingFolder + "/drawing/"); utils.validateFolder(filePath); //save SaveDrawingControlValues(); //get base 64 string string imgData = hfDrawImgValue.Value; //convert to byte array byte[] bytes = Convert.FromBase64String(imgData.Replace("data:image/png;base64,", "")); System.Drawing.Image image; using (MemoryStream ms = new MemoryStream(bytes)) { image = System.Drawing.Image.FromStream(ms); } image.Save(filePath + "tmp" + randomFileName, System.Drawing.Imaging.ImageFormat.Png); image.Dispose(); System.Drawing.Image existingdrawFile = null; if (_SurfaceDrawing.drawingFile != String.Empty) { existingdrawFile = System.Drawing.Image.FromFile(Server.MapPath("~/upload/" + _SurfaceDrawing.drawingFile)); } else if (_config.placeholder != String.Empty) { existingdrawFile = System.Drawing.Image.FromFile(Server.MapPath("~/upload/" + _config.placeholder)); } else { existingdrawFile = System.Drawing.Image.FromFile(Server.MapPath("~/images/draw_b.jpg")); } System.Drawing.Image newdrawFile = System.Drawing.Image.FromFile(filePath + "tmp" + randomFileName); //embellish background with sketch utils.EmbellishImage(existingdrawFile, newdrawFile, filePath + randomFileName); newdrawFile.Dispose(); File.Delete(filePath + "tmp" + randomFileName); existingdrawFile.Dispose(); _SurfaceDrawing.drawingFile = drawingFolder + "/drawing/" + randomFileName; _SurfaceDrawing.drawingDate = DateTime.Now; if (_SurfaceDrawing.recId > 0) { if (xData.UpdateTyped("recId", _SurfaceDrawing.recId.ToString(), typeof(oSurfaceDrawing), _SurfaceDrawing)) { PopulateDrawingControl(); ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "mySurfaceDrawingModalClose", "TaskFileUploadCancel(); $('#" + pnlDrawingModal.ClientID + "').closest('div').find('.modDrawingModal').modal('hide');$('body').removeClass('modal-open');", true); } } else { _SurfaceDrawing.recId = xData.SaveTyped("recId", typeof(oSurfaceDrawing), _SurfaceDrawing); if (_SurfaceDrawing.recId > 0) { PopulateDrawingControl(); ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "mySurfaceDrawingModalClose", "TaskFileUploadCancel(); $('#" + pnlDrawingModal.ClientID + "').closest('div').find('.modDrawingModal').modal('hide');$('body').removeClass('modal-open');", true); } } } catch (Exception ex) { exception.HandleException("surfaceSignature:", MethodBase.GetCurrentMethod().Name, ex, Session["user"]); Response.Redirect("/error", false); } } #endregion #region Properties private oSurfaceDrawing _SurfaceDrawing { get { if (ViewState["surfaceDrawing"] != null) { return (oSurfaceDrawing)ViewState["surfaceDrawing"]; } else { ViewState["surfaceDrawing"] = new oSurfaceDrawing(); return (oSurfaceDrawing)ViewState["surfaceDrawing"]; } } set { ViewState["surfaceDrawing"] = value; } } #endregion }