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
}