Open farzinmonsef opened 4 years ago
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . Usage in MeataData
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
[UIHint("NumberFormated")]
[RequiredIf(Field = "TransType", Values = "5|6|7", ErrorMessage = "Cancel and Retire is required for this Trans Type")]
[Display(Name = "Cancel and Retire")]
public Nullable
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . RequiredIfAttribute.cs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Web.Mvc;
namespace Entitites { [AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = true)] public class RequiredIfAttribute : ValidationAttribute, IClientValidatable { public string Field { get; set; } public string Values { get; set; }
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
var rule = new ModelClientValidationRule
{
ErrorMessage = ErrorMessage,
ValidationType = "requiredif"
};
rule.ValidationParameters["field"] = Field;
rule.ValidationParameters["values"] = Values;
yield return rule;
}
private const string DefaultErrorMessageFormatString = "The {0} field is required.";
private bool IsValueRequired(string checkValue, Object currentValue)
{
if (checkValue.Equals("!null", StringComparison.InvariantCultureIgnoreCase))
{
return currentValue != null;
}
return checkValue.Equals(currentValue.ToString());
}
protected override ValidationResult IsValid(Object value, ValidationContext context)
{
Object instance = context.ObjectInstance;
System.Type type = instance.GetType();
bool valueRequired = false;
var ValuesArray = Values.Split('|').ToList();
Object propertyValue = type.GetProperty(Field).GetValue(instance, null);
for (int i = 0; i < ValuesArray.Count; i++) {
valueRequired = IsValueRequired(ValuesArray[i], propertyValue);
if (valueRequired) break;
}
if (valueRequired)
{
return !string.IsNullOrEmpty(Convert.ToString(value))
? ValidationResult.Success
: new ValidationResult(ErrorMessage != "" ? ErrorMessage
: string.Format(DefaultErrorMessageFormatString, context.DisplayName));
}
return ValidationResult.Success;
}
}
}
DateTime dt1 = DateTime.Now;
int categoryId = RoleToCategory((int)userRole);
var transactions = new List<TransactionDTO>();
var query = Db.Transactions
.SelectMany(tr => Db.Types.Where(type => type.Id == tr.TransType).DefaultIfEmpty(), (tr, ty) => new { tr, ty })
.SelectMany(tra => Db.Types.Where(type => type.Id == tra.tr.Status).DefaultIfEmpty(), (tra, typ) => new { tra, typ })
.SelectMany(tran => Db.Types.Where(type => type.Id == tran.tra.tr.CategoryId).DefaultIfEmpty(), (tran, type) => new { tran, type })
.SelectMany(trans => Db.Types.Where(type => type.Id == trans.tran.tra.tr.PlanName).DefaultIfEmpty(), (trans, typee) => new { trans, typee })
.Where(x => (userRole != RoleType.Administrator ? x.trans.tran.tra.tr.CategoryId == categoryId : 1 == 1))
.Select(x => new TransactionDTO
{
Id = x.trans.tran.tra.tr.Id,
CategoryId = x.trans.tran.tra.tr.CategoryId,
Category = x.trans.type.Name,
. . . .
. . . .
})
//.ToDataSourceResult(request)
;
transactions = query.ToList();
//DateTime dt1 = DateTime.Now;
DateTime dt2 = DateTime.Now;
TimeSpan span = dt2 - dt1;
int ms = (int)span.TotalMilliseconds;
Debug.WriteLine("Total, time(ms)= " + ms.ToString());
return transactions;
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;
//using System; //using System.Collections.Generic; //using System.Linq; //using System.Linq.Dynamic; using System.Linq.Expressions; using DynamicExpression = System.Linq.Dynamic.DynamicExpression; using Kendo.DynamicLinq; using System.Linq.Dynamic;
namespace Data { public static class DBTools { }
public static class QueryableExtensions
{
/// <summary>
/// Applies data processing (paging, sorting, filtering and aggregates) over IQueryable using Dynamic Linq.
/// </summary>
/// <typeparam name="T">The type of the IQueryable.</typeparam>
/// <param name="queryable">The IQueryable which should be processed.</param>
/// <param name="take">Specifies how many items to take. Configurable via the pageSize setting of the Kendo DataSource.</param>
/// <param name="skip">Specifies how many items to skip.</param>
/// <param name="sort">Specifies the current sort order.</param>
/// <param name="filter">Specifies the current filter.</param>
/// <param name="aggregates">Specifies the current aggregates.</param>
/// <returns>A DataSourceResult object populated from the processed IQueryable.</returns>
public static DataSourceResult ToMyDataSourceResult<T>(this IQueryable<T> queryable, int take, int skip, IEnumerable<Sort> sort, Filter filter, IEnumerable<Aggregator> aggregates)
{
// Filter the data first
queryable = MyFilter(queryable, filter);
// Calculate the total number of records (needed for paging)
var total = queryable.Count();
// Calculate the aggregates
var aggregate = MyAggregate(queryable, aggregates);
// Sort the data
queryable = MySort(queryable, sort);
// Finally page the data
if (take > 0)
{
queryable = MyPage(queryable, take, skip);
}
return new DataSourceResult
{
Data = queryable.ToList(),
Total = total,
Aggregates = aggregate
};
}
/// <summary>
/// Applies data processing (paging, sorting and filtering) over IQueryable using Dynamic Linq.
/// </summary>
/// <typeparam name="T">The type of the IQueryable.</typeparam>
/// <param name="queryable">The IQueryable which should be processed.</param>
/// <param name="take">Specifies how many items to take. Configurable via the pageSize setting of the Kendo DataSource.</param>
/// <param name="skip">Specifies how many items to skip.</param>
/// <param name="sort">Specifies the current sort order.</param>
/// <param name="filter">Specifies the current filter.</param>
/// <returns>A DataSourceResult object populated from the processed IQueryable.</returns>
public static DataSourceResult ToMyDataSourceResult<T>(this IQueryable<T> queryable, int take, int skip, IEnumerable<Sort> sort, Filter filter)
{
return queryable.ToMyDataSourceResult(take, skip, sort, filter, null);
}
/// <summary>
/// Applies data processing (paging, sorting and filtering) over IQueryable using Dynamic Linq.
/// </summary>
/// <typeparam name="T">The type of the IQueryable.</typeparam>
/// <param name="queryable">The IQueryable which should be processed.</param>
/// <param name="request">The DataSourceRequest object containing take, skip, order, and filter data.</param>
/// <returns>A DataSourceResult object populated from the processed IQueryable.</returns>
public static DataSourceResult ToMyDataSourceResult<T>(this IQueryable<T> queryable, DataSourceRequest request)
{
return queryable.ToMyDataSourceResult(request.Take, request.Skip, request.Sort, request.Filter, null);
}
private static IQueryable<T> MyFilter<T>(IQueryable<T> queryable, Filter filter)
{
if (filter != null && filter.Logic != null)
{
// Collect a flat list of all filters
var filters = filter.All();
// Get all filter values as array (needed by the Where method of Dynamic Linq)
var values = filters.Select(f => f.Value).ToArray();
// Create a predicate expression e.g. Field1 = @0 And Field2 > @1
string predicate = filter.ToExpression(filters);
// Use the Where method of Dynamic Linq to filter the data
queryable = queryable.Where(predicate, values);
}
return queryable;
}
private static object MyAggregate<T>(IQueryable<T> queryable, IEnumerable<Aggregator> aggregates)
{
if (aggregates != null && aggregates.Any())
{
var objProps = new Dictionary<DynamicProperty, object>();
var groups = aggregates.GroupBy(g => g.Field);
Type type = null;
foreach (var group in groups)
{
var fieldProps = new Dictionary<DynamicProperty, object>();
foreach (var aggregate in group)
{
var prop = typeof(T).GetProperty(aggregate.Field);
var param = Expression.Parameter(typeof(T), "s");
var selector = aggregate.Aggregate == "count" && (Nullable.GetUnderlyingType(prop.PropertyType) != null)
? Expression.Lambda(Expression.NotEqual(Expression.MakeMemberAccess(param, prop), Expression.Constant(null, prop.PropertyType)), param)
: Expression.Lambda(Expression.MakeMemberAccess(param, prop), param);
var mi = aggregate.MethodInfo(typeof(T));
if (mi == null)
continue;
var val = queryable.Provider.Execute(Expression.Call(null, mi,
aggregate.Aggregate == "count" && (Nullable.GetUnderlyingType(prop.PropertyType) == null)
? new[] { queryable.Expression }
: new[] { queryable.Expression, Expression.Quote(selector) }));
fieldProps.Add(new DynamicProperty(aggregate.Aggregate, typeof(object)), val);
}
type = DynamicExpression.CreateClass(fieldProps.Keys);
var fieldObj = Activator.CreateInstance(type);
foreach (var p in fieldProps.Keys)
type.GetProperty(p.Name).SetValue(fieldObj, fieldProps[p], null);
objProps.Add(new DynamicProperty(group.Key, fieldObj.GetType()), fieldObj);
}
type = DynamicExpression.CreateClass(objProps.Keys);
var obj = Activator.CreateInstance(type);
foreach (var p in objProps.Keys)
{
type.GetProperty(p.Name).SetValue(obj, objProps[p], null);
}
return obj;
}
else
{
return null;
}
}
private static IQueryable<T> MySort<T>(IQueryable<T> queryable, IEnumerable<Sort> sort)
{
if (sort != null && sort.Any())
{
// Create ordering expression e.g. Field1 asc, Field2 desc
var ordering = String.Join(",", sort.Select(s => s.ToExpression()));
// Use the OrderBy method of Dynamic Linq to sort the data
return queryable.OrderBy(ordering);
}
return queryable;
}
private static IQueryable<T> MyPage<T>(IQueryable<T> queryable, int take, int skip)
{
return queryable.Skip(skip).Take(take);
}
}
}
using Common.SendEmail; using Common.SendEmail.Model; using System; using System.Linq; using Data; using Entitites;
namespace Business { public class BusEmail { public string previewLetter(int TransactionId, User user) { //getting Template & SMTP values from databse, table appConfig var SmtpServerName = ""; var SmtpPortNumber = ""; var Username = ""; var Password = ""; string template = ""; string to = ""; string subject = ""; var appSettingData = new AppSettingData(); var settingsData = appSettingData.FindAppSettingByToolID(getToolId(TransactionId)); if (settingsData != null && settingsData.Count > 0) { SmtpServerName = settingsData.FirstOrDefault(x => x.Key.ToUpper() == "SMTPSERVER")?.Value; SmtpPortNumber = settingsData.FirstOrDefault(x => x.Key.ToUpper() == "SMTPPORT")?.Value; Username = settingsData.FirstOrDefault(x => x.Key.ToUpper() == "SMTPUSERNAME")?.Value; Password = settingsData.FirstOrDefault(x => x.Key.ToUpper() == "SMTPPASSWORD")?.Value; template = Convert.ToString(settingsData.FirstOrDefault(x => x.Key.ToUpper() == "TEMPLATE")?.Value); to = Convert.ToString(settingsData.FirstOrDefault(x => x.Key.ToUpper() == "TO")?.Value); subject = Convert.ToString(settingsData.FirstOrDefault(x => x.Key.ToUpper() == "SUBJECT")?.Value); } //replace field values in found template if (!string.IsNullOrEmpty(template)) { TransactionData transactionData = new TransactionData(); Transaction transaction = transactionData.FindTransactionByID(TransactionId); template = template.Replace("[NetSharesToBroker]", transaction.NetSharesToMerrillLynch == null ? "" : string.Format("{0:n0}", transaction.NetSharesToMerrillLynch));
TypeData typeData = new TypeData();
var planName = transaction.PlanName == null ? null : typeData.FindTypeByID((int)transaction.PlanName);
template = template.Replace("[PlanName]", planName == null ? "" : (planName.Name == null ? "" : Convert.ToString(planName.Name)));
var title = typeData.FindTypeByID((int)transaction.TransactionType);
template = template.Replace("[Title]", title.Name == null ? "" : Convert.ToString(title.Name));
var JobTitlkeFormated = "";
CORPDIRECTORYLOADData corpdirectoryData = new CORPDIRECTORYLOADData();
var corpdirectory = corpdirectoryData.FindCORPDIRECTORYLOADByNBKID(user.StandardId);
if (corpdirectory != null)
{
var usertitle = corpdirectory.JobTitle;
var tmp = usertitle.ToString().Split(';');
JobTitlkeFormated = tmp[0];
}
template = template.Replace("[LetterYear]", DateTime.Now.ToString("yyyy"));
template = template.Replace("[Approved]", Convert.ToString(user.FirstName) + " " + Convert.ToString(user.LastName));
template = template.Replace("[CorporateTitle]", Convert.ToString(JobTitlkeFormated));
UserData userData = new UserData();
User preparedUser = userData.FindByID(transaction.CreatedById);
template = template.Replace("[Prepared]",
preparedUser != null ? Convert.ToString(preparedUser.FirstName) + " " + Convert.ToString(preparedUser.LastName) : "");
template = template.Replace("[EntryDate]", transaction.EntryDate.Value == null ? "" : transaction.EntryDate.Value.ToString("MMMM dd, yyyy"));
}
return template;
}
public string sndEmail(int TransactionId, string msgBody, int Status_Pending, int Status_Approved, int approver, string BOALogo_filename) //, int testbit = 0)
{
string pendingReqRepResult = "";
try
{
TransactionData transactionData = new TransactionData();
Transaction transact = transactionData.FindTransactionByID(TransactionId, Status_Pending);
if (transact != null)
{
string ToEmail = "",
CcEmail = "",
Subject = "";
IAppSettingBLL _oAppSettingDomain = new Common.SendEmail.AppSettingBLL();
IEmailMessage messageItem = new EmailMessage();
var appSettingEmailData = _oAppSettingDomain.GetAppSettingsDataByToolId(getToolId(TransactionId));// Convert.ToInt32(appPortalTool.EQMPendingReport));
var settingEmailData = appSettingEmailData.ToList();
if (appSettingEmailData != null && settingEmailData.Count > 0)
{
ToEmail = settingEmailData.FirstOrDefault(x => x.Key == "TO")?.Value;
CcEmail = settingEmailData.FirstOrDefault(x => x.Key == "CC")?.Value;
Subject = settingEmailData.FirstOrDefault(x => x.Key == "SUBJECT")?.Value;
}
messageItem.Body = msgBody;
messageItem.Cc = CcEmail;
messageItem.Subject = Subject;
messageItem.To = ToEmail;
messageItem.AttachmentFileName = BOALogo_filename;
messageItem.Key = "WithAttachment";
messageItem.MediaTypeName = "image/jpeg";
Email msg = new Email(appPortalTool.SMTPSettings);
msg.Send(messageItem);
pendingReqRepResult = Convert.ToString(messageItem.Error);
////////// Logging return of Send Email for Checking Purposes
BusLogDB busLogDB = new BusLogDB();
busLogDB.LogDB(new LogDB()
{
Date_Time = DateTime.Now,
UserName = Convert.ToString(approver),
Controller = "BusEmail",
Action = "sndEmail",
Message = pendingReqRepResult,
Comment = "Return From Send Email for Transaction ID= " + Convert.ToString(transact.Id) + " Setting Status=" + Convert.ToString(Status_Approved)
});
///////////////////////////////////////////////////////////////
if (string.IsNullOrEmpty(pendingReqRepResult) ||
((pendingReqRepResult.ToUpper().IndexOf("FAILURE") < 0) &&
(pendingReqRepResult.ToUpper().IndexOf("ERROR") < 0))
)
{
pendingReqRepResult = "";
transact = transactionData.SetTransactionStatus(transact, approver, Status_Approved);
}
}
else
{
pendingReqRepResult = "You already EMAILED the transaction\nNo further action permitted!";
}
}
catch (Exception ex)
{
pendingReqRepResult = "Error: " + ex.ToString();
}
return Convert.ToString(pendingReqRepResult);
}
/// <summary>
/// Takes a transaction and returns the Tool Id needed for email settings for that type
/// </summary>
/// <param name="transactionId">Transaction Identitifer</param>
/// <returns>Tool ID</returns>
private int getToolId(int transactionId)
{
TransactionData transactionData = new TransactionData();
Transaction transaction = transactionData.FindTransactionByID(transactionId);
TypeData typeData = new TypeData();
var transactionType = typeData.FindTypeByID((int)transaction.TransactionType);
return Convert.ToInt32(transactionType.Comment);
}
}
}
Equity Management Communication | ||||
[Title] | ||||
To: [To] | ||||
From: [From] | ||||
[Title] | ||||
We have been notified that the following shares should be released as follows: | ||||
● Effective Date: [TransactionEffectiveDate] | ||||
● Requisition Number: [RequisitionNumber] | ||||
● Debit: DWAC from DTC | ||||
● Debit Shares: [NetSharesToBroker] | ||||
● Debit: Cancel and Retire (R469) - Payment for taxes | ||||
● Debit Shares: [TotalShares] | ||||
● Credit: Restricted Stock Account for Stock Plan Participants (Account #5793106) | ||||
● Credit Shares: [SharesForTax] | ||||
Approved By: [Approved] | ||||
Corporate Title: [CorporateTitle] | ||||
Prepared by: [Prepared] | ||||
Date: [EntryDate] | ||||
Transaction Id: [TransactionId] | ||||
Bank of America N.A. Member FDIC © [LetterYear] Bank of America Corporation. All rights reserved | ||||
[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")] [HttpPost] public ActionResult GetPreviewLetter(int TransactionId) { BusEmail ml = new BusEmail(); string tmp1 = ml.previewLetter(TransactionId, (User)Session["currentUser"]); string tmp2 = tmp1; Session["previewLetter"] = tmp2.Replace("[BOA-Logo]", "<img src=\"cid:DSitesEqmwwwrootImagesBOALogoLetter.jpg\" alt=\"Bank of America Logo\" />"); Session["TransactionId"] = TransactionId;
string display_BOA_logo = "<p style='text-align:right'>" +
" <img alt='Bank Of America Logo' height='32' width='300'" +
" src='data:image/jpeg;base64,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qaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A/fyiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiivC/2pf+Cjnwo/Y+uPsnjHXLxNWZd0en2WnzXE0vGcBgoiB/3nFZ1KkKceabsvM9HK8nx2Z4hYTL6MqtR7RhFyfrZdF1eyPdKK/K/wCNf/ByG5M1v8Ovh0q9fKvvEd3n6ZtoD/7Wrwnw7/wX1/aA0fxbLqF3deE9WsZWBGl3GjrHbRDuEaNlm/FpGrzamd4WLsm36I/ZMt+jnxpi6DrTpQpaXUZzXM/RR5kn/icT9xqK/NT4Jf8ABxz4V1kw2/xB8B6xochwrXmi3CX0JP8AeMUnlug9gzn619j/AAJ/4KDfBr9pEwxeE/iBoN3fz4CafdSmyvmPoIZgjtj1UEe9dVHH4er8El+T/E+F4i8MeKMjTlmOCnGK3klzw+coc0V82j2Siiiuw+ECiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK5X4yaz4w0LwHd3HgXQ9F8Q+IVH7iz1PUmsIG6871ikyRx8p2g8/MtfkD/wAFBvit+2prIvovH2j+KPCvhX5vMt/C0BGkhPSS4t2kLqR/DLKR7CuLGY1YeN3Fv0WnzZ+i8A+HdbijEeyhi6NBXt781zv/AA0780vnZeZ+mf7SH/BSf4M/ssGa38UeM9Pm1iHIOk6Yft18G/utHHkRn/roUHvWX8Hv+CrvwB+NflR6d8RtH0u8kwPsut7tLkVj/DumCox/3Gav57Ccmivn3xBW5rqKt21/P/gH9T0/or5AsGqVTFVXW/nXIo/+Acr0/wC3r+Z/Utpup2+s2EV1Z3EN1azrvjmhcSRyL6hhwR7iodd8P6f4p0uSx1Oxs9SsphiS3uoVmikHurAg/jX80fwh/aO8ffAPUPtPgvxh4i8Mvu3MlhfSRQyn/bjB2OPZgRX2R8B/+DhP4r+AfJtvG2jaD48skwHmCf2bfsP9+IGL/wAhZ9676OfUZ6VU4/iv6+R+X8QfRh4hwT9tk9eGIS2X8Ofyu3H586P0G+NP/BIH9n/42CaS48C2nh2+lzi78PSHTWQnuIk/ck/70Zr47+Ov/BuFqVms118NvH9tfKMmPT/ENuYZMen2iEMrE+8Sj39Ppr9n3/guL8C/jWYLXVdWvvAOqy4Uw69Dsty3fFyhaML7yFPpX1v4d8S6d4v0a31LSdQstU0+6XfDdWk6zQzL6q6kqR7g11fVcFileKT9NH+H6nxtPjbxG4Mqqhi6lamtlGsnOD8oud1b/BJep/Ot+0B/wT3+Mf7MizTeLvAmtWumwZLalaIL2xA9TNCWRM+jlT7V4zX9ThGRXzx+0Z/wSw+CP7TKXE2seDbPR9Ynyf7V0IDT7vcf4m2Dy5G95EevMxHD73oy+T/z/wCAfsPC/wBKiEmqXEOEt3nSd184Sd/um/JH4vfAD/gpP8a/2avJh8N+PNXk0yDAGmam/wDaFmFH8KxzbvLH/XMqfevub9nj/g42sbvyLP4peB5bNzhX1Tw7J5kefU20zblA6kiVj6LXnP7S3/BvH468Ei41D4Z+IrDxpYrll02/22GogdlVifJkPuWj+lfB3xQ+EHir4J+KJNF8XeHtY8N6pFybbULV4HYf3l3D5lPZlyD2NcHtcdg3aV0vPVH6f/Ynhv4gU3Vw0adSo9W4fu6q85Jcsn6yUl6n9FH7Pv7afwt/aktFbwP400XWrll3tYeb5F9GMZO63kCygD12446mvUa/lt0Nr5NYtW003Q1BZVNubbd5wkz8uzbzuz0xzX6ef8E+/in+3RZfYbf/AIRXUPFHhP5QW8d/6C8cf96O4kK3LZGMHbKAOi17GDzp1Xyzg7+Wv4H4L4hfR3o5NSeMy/MKah0jXlGnL0jPSMn5NR9T9VqKo+GbnUrzw/Zy6xZ2en6pJEGura0umuoIX7qkrRxlwPUoufSr1e8fzDOLjJxfTs7/AIrR+qCiiigkKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK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KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiikdxGpZiFVRkk9qAFrn/ih8V/DPwS8D33ibxhr+keGfD+mJ5l1qGp3SW1vCPd3IGT0A6k8AE1+ev/BS3/g5U+FP7Hjah4X+GotPix8QIN0T/ZLj/iR6VIOP31yufOZT1jhz0KtJGRX4L/tp/wDBQv4t/wDBQDx3/bnxO8WXmsLC7NY6XEfI0vSweMQW6/IpxwXOXYAbmY819pknBWMxtqtf93T7vd+i/V/K54eOzyjQ92n70vwXq/8AI/Wb/go1/wAHXdjo5vvC/wCzho66lcLuhfxlrlsVt07brS0bDP6h59oBHMTA5r8Yfjt+0N44/ad+IV14q+IPirWvF3iC84e81K5aZkXJIRB92OMZ4RAFXsBXG16p+yT+xT8Tv25PiTH4V+GPhPUfEmo/K11NGvl2enRk48y4nbEcSdeWILEYUMcCv1TL8ny/KqTlSSjZaye/zb29FZeR8liMZicXO0m32S2+48rr68/4J4f8ETfjh/wUXurXUvD+h/8ACL+BZHxL4q1xGgsmUHn7OmPMuW4I/dgoCMM6da/Xj/gmv/wbD/DP9mQaf4o+Mctl8VPG0O2VdOaI/wDCPabJ1wImAa6IOfmmAQ5/1QIBr9RLOzh06zit7eGOC3gQRxRRqFSNQMBQBwABwAK+PzrxAhC9LLlzP+Z7fJdfV6eTPZwPDspe/iXZdlv82fE//BPL/ggf8Cv2AlsdZXSf+FgfEC12ufEevwpIbaUfxWttzHb4PIYbpRnHmEV9uUV8vf8ABQr/AIK9/Bf/AIJvaFIvjTXxqfi6SLzLPwrpBW41S4yMqzrkLBGeu+UqCAdu4jbX5zKpjczxGvNUm/n/AMMvuSPpoxoYWnpaMUfUJOK+Av8Agob/AMHFHwN/Yga+0LQ7wfFTx7bbozpOhXK/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vjq1Z1akqst5NvTbXse1TgoRUF00CiiisigooooAKKKKACiiigAooooAKKKKACiiigAooooAq63oln4l0e60/UrO11DT76JoLi2uYllhnjYYZHVgQykHBBGDX5Wf8FHf+CFc2j/b/GnwRtZLq1+ae98J7i0sPdms2PLjv5LHd/cLZCD9XaK5cVg6WIjy1F8+qPtuCPEDOOFcZ9byupo7c0HrCa7SXfs1aS6Pc/lnvLObTruW3uIpILiBzHJHIpV42BwVIPIIPBBqOv3V/wCCkH/BInwt+2XZXfibw2LPwt8SFTcL0JttNYIHCXSqPvdhMoLDuHAAH5efAn/glT8XvjN+0PffD668O3nhmbQZVGt6lqER+yadETw6uOJi4BMaxk7+uQoLD4/FZXXpVFBK99mv60P764N8aOHc9yueYVaqoSpRvUhNq8V3T+3FvRNK92k0m0jxn4J/A3xV+0V8RLHwr4N0a71zW9Qb5IYV+WNRjdJIx+WONc8uxAHrX7X/APBOP/gkf4T/AGLrC18ReIPsnir4kOmW1Bo91rpJI5S1Vh17GVgHIzgICVPsX7HP7Engf9iP4cLoXhGx3Xlwqtqer3Chr3VJB/FI3ZRk7Y1wq5PGSSfX6+gy7KI0P3lXWX4L/g+Z/K3ix4743iJzyzJ26OD2b2nV/wAX8sX/ACrf7Tey8h/aS/avh+Bt6uk6Xo//AAkPiH7CdVuYpbv7HY6RZeZ5QubufZIyK8mURY45JHZW2rhWI5n4O/txT+I/iFZ+GPGWhaXol3qk6WllqGk6nNe2LXLo7x2863FvbXFvJKsUhiLxGOUxOFcsNtcb+2joNx4B8V+P77UobiLwt8T9C0vTzrqJKYdBu7G4mYpctEGeGGWKfck2NqyI4YrvUnk/BFjpnxo+JMnhvwPqVz8Qbafxho/iK98cHULnUI9P0nTrn7dDYSXMpKeck5khijgY5jneRwG3s/RUr1FVsn8vv+eumvQ+Wy3hvKamTqtUpN3jd1bytHSDk3qoJwlKcVBpynyqyfMpL7iooor0j8hCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//2Q==' />" +
"</p>";
string display_command =
"<p style='text-align:right;padding:opx 50px'>" +
" <input type='button' class='k-button' name='cancelemailLetter' value='Cancel' onclick='cancelemailLetter()'>" +
" <input type='button' class='k-button k-primary' name='emailLetter' value='Send Email to ComputerShare' onclick='emailLetterconfirm()'> " +
"</p>";
tmp1 = tmp1.Replace("[BOA-Logo]", display_BOA_logo) + display_command;
return Json(tmp1);
}
[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
[HttpPost]
public ActionResult SendMail()
{
var ret = "";
try
{
int TransactionId = (int)Session["TransactionId"];
BusEmail busEmail = new BusEmail();
ret = busEmail.sndEmail(TransactionId, (string)Session["previewLetter"],
(int)Session["Status_Pending"], (int)Session["Status_Approved"],
(int)Session["userId"], Path.Combine(Server.MapPath("~/Images"), "BOALogoLetter.jpg"));
}
catch (Exception ex)
{
ret = ex.ToString();
//throw ex;
}
return Json(ret);
}
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.ComponentModel.DataAnnotations; //using Attributes;
namespace Entitites { [MetadataType(typeof(TransactionMetaData))] public partial class Transaction { public static explicit operator List
[UIHint("DropDownCategory")]
[Required(ErrorMessage = "Category is required.")]
[Display(Name = "Category")]
public Nullable<int> CategoryId { get; set; }
//[UIHint("DropDownCategory")]
[UIHint("DropDownTransactionType")]
[Required(ErrorMessage = "Transaction Type is required.")]
[Display(Name = "Transaction Type")]
public Nullable<int> TransactionType { get; set; }
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . } }
@using Entitites @using EQM.Enumerations; @{ViewBag.Title = "Transactions"; }
@*
<br />
<input type="button" value="download" onclick="testDownload( 163 );" />*@
<Div id="myDiv">
</Div>
<br />
<script id="template" type="text/kendo-tmpl">
#if(TransactionType=='14') @*Restricted Stock Issuance*@
{#
<div class="row">
<div class="col-md-6 offset-md-3 row">
<div class="col">
<div class="form-group row">
<span class="font-weight-bold text-right col-md-8">Requisition Number:</span>
<span class="col-md-4">#= RequisitionNumber != null ? RequisitionNumber : '' #</span>
</div>
<div class="form-group row">
<span class="font-weight-bold text-right col-md-8">Reserve Name:</span>
<span class="col-md-4">#= ReserveName != null ? ReserveName : '' #</span>
</div>
<div class="form-group row">
<span class="font-weight-bold text-right col-md-8">Total Vested Shares:</span>
<span class="col-md-4">#= kendo.toString(TotalVestedShares != null ? TotalVestedShares : '', "n0") #</span>
</div>
</div>
<div class="col">
<div class="form-group row">
<span class="font-weight-bold text-right col-md-4">Memo:</span>
<span class="col-md-8">#= Memo != null ? Memo : '' #</span>
</div>
</div>
</div>
</div>
#}#
#if(TransactionType=='15') @*Restricted Stock Issuance - Reversal*@
{#
<div class="row">
<div class="col-md-6 offset-md-3 row">
<div class="col">
<div class="form-group row">
<span class="font-weight-bold text-right col-md-8">Requisition Number:</span>
<span class="col-md-4">#= RequisitionNumber != null ? RequisitionNumber : '' #</span>
</div>
<div class="form-group row">
<span class="font-weight-bold text-right col-md-8">Reserve Name:</span>
<span class="col-md-4">#= ReserveName != null ? ReserveName : '' #</span>
</div>
<div class="form-group row">
<span class="font-weight-bold text-right col-md-8">Total Vested Shares:</span>
<span class="col-md-4">#= kendo.toString(TotalVestedShares != null ? TotalVestedShares : '', "n0") #</span>
</div>
</div>
<div class="col">
<div class="form-group row">
<span class="font-weight-bold text-right col-md-4">Memo:</span>
<span class="col-md-8">#= Memo != null ? Memo : '' #</span>
</div>
</div>
</div>
</div>
#}#
#if(TransactionType=='3') @*Restricted Stock Release*@
{#
<div class="row">
<div class="col">
<div class="form-group row">
<span class="font-weight-bold text-right col-md-8">Requisition Number:</span>
<span class="col-md-4">#= RequisitionNumber != null ? RequisitionNumber : '' #</span>
</div>
@*<div class="form-group row">
<span class="font-weight-bold text-right col-md-8">Reserve Name:</span>
<span class="col-md-4">#= ReserveName != null ? ReserveName : '' #</span>
</div>*@
<div class="form-group row">
<span class="font-weight-bold text-right col-md-8">Total Vested Shares:</span>
<span class="col-md-4"> #= kendo.toString(TotalShares != null ? TotalShares : '', "n0") #</span>
</div>
</div>
<div class="col">
<div class="form-group row">
<span class="font-weight-bold text-right col-md-8">Net Shares to Broker:</span>
<span class="col-md-4"> #= kendo.toString(NetSharesToMerrillLynch != null ? NetSharesToMerrillLynch : '', "n0") #</span>
</div>
<div class="form-group row">
<span class="font-weight-bold text-right col-md-8">Shares for Tax:</span>
<span class="col-md-4">#= kendo.toString(SharesForTax != null ? SharesForTax : '', "n0") #</span>
</div>
<div class="form-group row">
<span class="font-weight-bold text-right col-md-8">Value of Tax Shares:</span>
<span class="col-md-4">#= kendo.toString(ValueOfTaxShares != null ? ValueOfTaxShares : '', "c") #</span>
</div>
</div>
<div class="col">
<div class="form-group row">
<span class="font-weight-bold text-right col-md-2">Memo:</span>
<span class="col-md-10">#= Memo != null ? Memo : '' #</span>
</div>
</div>
</div>
#}#
#if(TransactionType=='4') @*Restricted Stock Release - Reversal*@
{#
<div class="row">
<div class="col">
<div class="form-group row">
<span class="font-weight-bold text-right col-md-8">Requisition Number:</span>
<span class="col-md-4">#= RequisitionNumber != null ? RequisitionNumber : '' #</span>
</div>
<div class="form-group row">
<span class="font-weight-bold text-right col-md-8">Reserve Name:</span>
<span class="col-md-4">#= ReserveName != null ? ReserveName : '' #</span>
</div>
<div class="form-group row">
<span class="font-weight-bold text-right col-md-8">Total Vested Shares:</span>
<span class="col-md-4"> #= kendo.toString(TotalShares != null ? TotalShares : '', "n0") #</span>
</div>
</div>
<div class="col">
<div class="form-group row">
<span class="font-weight-bold text-right col-md-8">Net Shares to Broker:</span>
<span class="col-md-4"> #= kendo.toString(NetSharesToMerrillLynch != null ? NetSharesToMerrillLynch : '', "n0") #</span>
</div>
<div class="form-group row">
<span class="font-weight-bold text-right col-md-8">Shares for Tax:</span>
<span class="col-md-4">#= kendo.toString(SharesForTax != null ? SharesForTax : '', "n0") #</span>
</div>
<div class="form-group row">
<span class="font-weight-bold text-right col-md-8">Value of Tax Shares:</span>
<span class="col-md-4">#= kendo.toString(ValueOfTaxShares != null ? ValueOfTaxShares : '', "c") #</span>
</div>
</div>
<div class="col">
<div class="form-group row">
<span class="font-weight-bold text-right col-md-2">Memo:</span>
<span class="col-md-10">#= Memo != null ? Memo : '' #</span>
</div>
</div>
</div>
#}#
#if(TransactionType=='5') @*Annuity*@
{#
<div class="row">
<div class="col">
<div class="form-group row">
<span class="font-weight-bold text-right col-md-8">Plan Name:</span>
<span class="col-md-4">#= PlanName!= null ? TypePlanName : '' #</span>
</div>
<div class="form-group row">
<span class="font-weight-bold text-right col-md-8">Gross Stock Units Distributed:</span>
<span class="col-md-4">#= kendo.toString(GrossStockUnitsDistributed != null ? GrossStockUnitsDistributed : '', "n0") #</span>
</div>
<div class="form-group row">
<span class="font-weight-bold text-right col-md-8">Net Stock Unit Shares to Distribute:</span>
<span class="col-md-4"> #= kendo.toString(NetStockUnitSharestoDistribute!= null ? NetStockUnitSharestoDistribute : '', "n0") #</span>
</div>
<div class="form-group row">
<span class="font-weight-bold text-right col-md-8">Cancel and Retire Shares:</span>
<span class="col-md-4"> #= kendo.toString(CancelandRetireShares != null ? CancelandRetireShares : '', "n0") #</span>
</div>
<div class="form-group row">
<span class="font-weight-bold text-right col-md-8">Value of Tax Shares:</span>
<span class="col-md-4">#= kendo.toString(ValueOfTaxShares != null ? ValueOfTaxShares : '', "c") #</span>
</div>
</div>
<div class="col">
<div class="form-group row">
<span class="font-weight-bold text-right col-md-2">Memo:</span>
<span class="col-md-10">#= Memo != null ? Memo : '' #</span>
</div>
</div>
</div>
#}#
#if(TransactionType=='6') @* For Director Grant *@
{#
<div class="row">
<div class="col">
<div class="form-group row">
<span class="font-weight-bold text-right col-md-8">Reserve Name:</span>
<span class="col-md-4">#= ReserveName!= null ? ReserveName : '' #</span>
</div>
<div class="form-group row">
<span class="font-weight-bold text-right col-md-8">Common Restricted Unvested Shares Granted:</span>
<span class="col-md-4">#= kendo.toString(CommonRestrictedUnvestedSharesGranted != null ? CommonRestrictedUnvestedSharesGranted : '', "n0") #</span>
</div>
<div class="form-group row">
<span class="font-weight-bold text-right col-md-8">Common Restricted Unvested Shares INTO CR1:</span>
<span class="col-md-4"> #= kendo.toString(CommonRestrictedUnvestedSharesINTOCR1!= null ? CommonRestrictedUnvestedSharesINTOCR1 : '', "n0") #</span>
</div>
<div class="form-group row">
<span class="font-weight-bold text-right col-md-8">Cancel and Retire Shares:</span>
<span class="col-md-4"> #= kendo.toString(CancelandRetireShares != null ? CancelandRetireShares : '', "n0") #</span>
</div>
<div class="form-group row">
<span class="font-weight-bold text-right col-md-8">Director Name:</span>
<span class="col-md-4"> #= kendo.toString(DirectorName != null ? DirectorName : '') #</span>
</div>
<div class="form-group row">
<span class="font-weight-bold text-right col-md-8">Value of Tax Shares:</span>
<span class="col-md-4">#= kendo.toString(ValueOfTaxShares != null ? ValueOfTaxShares : '', "c") #</span>
</div>
</div>
<div class="col">
<div class="form-group row">
<span class="font-weight-bold text-right col-md-2">Memo:</span>
<span class="col-md-10">#= Memo != null ? Memo : '' #</span>
</div>
</div>
</div>
#}#
#if(TransactionType=='7') @* For Director Vesting *@
{#
<div class="row">
<div class="col">
<div class="form-group row">
<span class="font-weight-bold text-right col-md-8">Common Restricted Unvested Shares FROM CR1:</span>
<span class="col-md-4"> #= kendo.toString(CommonRestrictedUnvestedSharesFROMCR1!= null ? CommonRestrictedUnvestedSharesFROMCR1 : '', "n0") #</span>
</div>
<div class="form-group row">
<span class="font-weight-bold text-right col-md-8"> Common Restricted Shares INTO CR2:</span>
<span class="col-md-4"> #= kendo.toString(CommonRestrictedShareINTOCR2!= null ? CommonRestrictedShareINTOCR2 : '', "n0") #</span>
</div>
<div class="form-group row">
<span class="font-weight-bold text-right col-md-8">Cancel and Retire Shares:</span>
<span class="col-md-4"> #= kendo.toString(CancelandRetireShares != null ? CancelandRetireShares : '', "n0") #</span>
</div>
<div class="form-group row">
<span class="font-weight-bold text-right col-md-8">Director Name:</span>
<span class="col-md-4"> #= kendo.toString(DirectorName != null ? DirectorName : '') #</span>
</div>
<div class="form-group row">
<span class="font-weight-bold text-right col-md-8">Value of Tax Shares:</span>
<span class="col-md-4">#= kendo.toString(ValueOfTaxShares != null ? ValueOfTaxShares : '', "c") #</span>
</div>
</div>
<div class="col">
<div class="form-group row">
<span class="font-weight-bold text-right col-md-2">Memo:</span>
<span class="col-md-10">#= Memo != null ? Memo : '' #</span>
</div>
</div>
</div>
#}#
#if(TransactionType=='10') @* For Retire Treasury Shares*@
{#
<div class="row">
<div class="col">
<div class="form-group row">
<span class="font-weight-bold text-right col-md-8">Account Name:</span>
<span class="col-md-4"> #= kendo.toString(AccountName!= null ? AccountName : '', "n0") #</span>
</div>
<div class="form-group row">
<span class="font-weight-bold text-right col-md-8"> Total Treasury Shares:</span>
<span class="col-md-4"> #= kendo.toString(TotalTreasurySharestoRetire!= null ? TotalTreasurySharestoRetire : '', "n0") #</span>
</div>
<div class="form-group row">
<span class="font-weight-bold text-right col-md-8">Cancel and Retire Shares:</span>
<span class="col-md-4"> #= kendo.toString(CancelandRetireShares != null ? CancelandRetireShares : '', "n0") #</span>
</div>
</div>
<div class="col">
<div class="form-group row">
<span class="font-weight-bold text-right col-md-2">Memo:</span>
<span class="col-md-10">#= Memo != null ? Memo : '' #</span>
</div>
</div>
</div>
#}#
</script>
@(Html.Kendo().Window()
.Name("windowPreview")
.Title("Preview Letter")
.Modal(true)
.Visible(false)
.Content(@<text>
<html>
<head>
</head>
<body lang=EN-US>
<div style="font-size:medium">
<br />
[BOA-Logo]
<table style="width:100%">
<tr><td colspan="5" style="padding:20px 0px 0px 0px"><h6>Equity Management Communication</h6></td></tr>
<tr><td colspan="5" style="padding:30px 0px 30px 0px"><h3>[Title]</h3></td></tr>
<tr><td colspan="5"><b>To:</b> [To]</td></tr>
<tr><td colspan="5"><b>From:</b> [From]</td></tr>
<tr><td colspan="5"> </td></tr>
<tr><td colspan="5" style="padding:10px 0px 10px 0px">Under the terms of the Bank of America Key 2003 Employee Equity Plan, we instruct you as follows:</td></tr>
<tr><td colspan="5" style="padding:0px 0px 40px 0px;color:#e61837"><h5>[Title]</h5></td></tr>
<tr><td></td><td colspan="3">♦ Requisition Number: [RequisitionNumber]</td></tr>
<tr><td></td><td colspan="3">♦ Effective Date: [TransactionEffectiveDate]</td></tr>
<tr><td></td><td colspan="3">♦ Debit: [ReserveName]</td></tr>
<tr><td></td><td colspan="3">♦ Debit Shares: [TotalVestedShares]</td></tr>
<tr><td></td><td colspan="3">♦ Credit: Restricted Stock Account for Stock Plan Participants </td></tr>
<tr><td></td><td colspan="3">♦ Credit Shares: [TotalVestedShares]</td></tr>
<tr><td colspan="5"> </td></tr>
<tr><td colspan="4"> </td></tr>
<tr><td colspan="5">Approved By: [Approved]</td></tr>
<tr><td colspan="5">Corporate Title: [CorporateTitle]</td></tr>
<tr><td colspan="5"> </td></tr>
<tr><td colspan="5">Prepared by: [Prepared]</td></tr>
<tr><td colspan="5">Date: [EntryDate]</td></tr>
<tr class="tblrowbotoomborder"><td colspan="5"> </td></tr>
<tr><td colspan="5" style="padding:10px 0px 40px 0px">Bank of America N.A. Member FDIC © [LetterYear] Bank of America Corporation. All rights reserved</td></tr>
<tr><td> </td></tr>
</table>
</div>
</body>
</html>
<p style="text-align:center;padding: 50px">
<input type="button" class="k-button" name="cancelemailLetter" value="Cancel" onclick="cancelemailLetter()">
<input type="button" class="k-button k-primary" name="emailLetter" value="Send Email to ComputerShare" onclick="emailLetter()">
</p>
</text>)
.Draggable() .Resizable() .Width(800) .Actions(actions => actions.Pin().Minimize().Maximize().Close()) .Events(ev => ev.Close("onWindowClose")) )
<div id="msg" style="background:#0d005d;
visibility:hidden;
width:30%;
top:0px;
left: 0%;
position:absolute;
color:white;
box-shadow: 10px 10px 5px #aaaaaa;
text-align: center;
border-radius: 4px;
border: 4px black;
padding: 0px 18px 18px 18px;
border: 4px solid #333;
font-size: 20px;
z-index: 8888;
opacity: 0.97;">
<table style="width:100%;height:100%;">
<tbody>
<tr>
<td id="mymsgtitle" colspan="2" style="text-align:center;padding: 0px 0px 18px 0px;font-size:30px;">
</td>
</tr>
<tr>
<td>
<img id="msgIcon" src="../Images/_info.png" alt="Success">
</td>
<td id="mymsg" style="vertical-align: middle">
</td>
</tr>
</tbody>
</table>
</div>
<div id="alertboxmodal"
style="display: none; /* Hidden by default */
position: fixed; /* Stay in place */
z-index: 9999; /* Sit on top */
padding-top: 100px; /* Location of the box */
left: 0;
top: 0;
width: 100%; /* Full width */
height: 100%; /* Full height */
overflow: auto; /* Enable scroll if needed */
background-color: rgb(0,0,0); /* Fallback color */
background-color: rgba(0,0,0,0.4); /* Black w/ opacity */"
class="alertboxmodal">
<div style="background-color: #fefefe;
margin: auto;
padding: 20px;
border: 1px solid #888;
width: 40%;"
class="alertbox-content">
<table style="width:100%;height:100%;">
<tbody>
<tr>
<td id="mymsgtitle" colspan="5" style="text-align:center;padding: 0px 0px 0px 0px;">
<span class="close" id="alertboxclose"
style="{width:30px;height:30px;text-align:right;color: #aaaaaa;float:right;font-size:28px;font-weight:bold;}
:hover,
:focus {color: #000;text-decoration: none;cursor: pointer;}"
onclick="alertboxclose();">×</span>
</td>
</tr>
<tr>
<td id="mymsgtitle" colspan="5" style="text-align:center;padding: 0px 0px 18px 0px;font-size:30px;">
<span id="alertboxtitle" style="text-align:center">MY-TITLE-HERE</span>
</td>
</tr>
<tr>
<td>
<img id="msgIcon" src="../Images/_question.png" alt="Success">
</td>
<td colspan="3" style="vertical-align: middle">
<span id="alertboxmsg" style="text-align:center">MY-MESSAGE-HERE</span>
</td>
</tr>
<tr>
<td colspan="2" style="vertical-align:left;text-align:center;padding: 40px 0px 0px 0px;font-size:15px;">
<span id="alertboxftr" style="text-align:center">MY-FOOTER-HERE</span>
</td>
<td style="text-align:right">
<input type="button" value="OK" class="k-button k-primary" onclick="modaldlgclick(1);" />
<input type="button" value="Cancel" class="k-button" onclick="modaldlgclick(0);" />
</td>
</tr>
</tbody>
</table>
</div>
</div>
<!-- #endregion -->
<script type="text/javascript">
// #region Main
$(document).ready(function () {
$("#transactiongrid").kendoTooltip({
filter: "td:nth-child(8)",
position: "below",
hideAfter: 500,
content: function (e) {
//debugger;
var dataItem = $("#transactiongrid").data("kendoGrid").dataItem(e.target.closest("tr"));
var content = dataItem.FileName;
if ((content == "") || (content == null))
{ content = "(No File)"; }
else
{ content = 'Download "' + content + '"'; }
return '<div style="text-align:center;width: ' + content.length * .5 + 'em; max-width: 14em">' + content + '</div>';
}
}).data("kendoTooltip");
})
function openWindow(e) {
e.preventDefault();
var row = $(e.currentTarget).closest("tr");
wnd.center().open();
$("#yes").click(function () {
grid.removeRow(row);
wnd.close();
});
$("#no").click(function () {
wnd.close();
});
}
function data_error_handler(e) {
if (e.errors) {
var message = "Data Errors:\n";
//ev.preventDefault();
$.each(e.errors, function (key, value) {
if ('errors' in value) {
$.each(value.errors, function () {
message += this + "\n";
});
}
});
alertBox(3, message, '', 10000);
}
}
function integerFilter(e) {
e.kendoNumericTextBox({
decimals: 0,
format: "g"
});
}
// #endregion
// #region Transaction Grid Events
var rowselected;
var transactionEdit = 0
function onTransactionChange(e) {
//if (typeof rowselected != 'undefined') {
// $("#transactiongrid").data("kendoGrid").select(rowselected);
//}
}
var gridEdit = null;
function onTransactionEdit(e) {
debugger;
gridEdit = e;
console.log("Grid data Edit= " + (transactionEdit++));
//rowselected = $(event.srcElement).closest("tr");
var row = $(event.srcElement).closest("tr");
var grid = $("#transactiongrid").data("kendoGrid");
rowselected = row;
grid.select(row);
var datepickerinput = e.container.find("input[name=EntryDate]"); // get the input element for the field
var datepicker = datepickerinput.data("kendoDatePicker");
datepicker.enable(false); //disable the date picker
if (e.model.isNew() && !e.model.dirty) {
var tmp = e.container.find("input[name=TransactionType]"); // get the input element for the field
tmp.val(2); // set the value
tmp.change(); // trigger change in order to notify the model binding
var tmp1 = e.container.find("input[name=AccountName]"); // get the input element for the field
tmp1.val("BAC Treasury Acct. (KEEP-TS) - T35"); // set the value
tmp1.change(); // trigger change in order to notify the model binding
var today = new Date();
var dd = String(today.getDate()).padStart(2, '0');
var mm = String(today.getMonth() + 1).padStart(2, '0'); //January is 0!
var yyyy = today.getFullYear();
today = mm + '/' + dd + '/' + yyyy;
datepickerinput.val(today); // set the value
datepickerinput.change(); // trigger change in order to notify the model binding
hideAll();
hideTransactionId();
}
else {
var id = e.container.find("input[name=Id]");
callSetFilePrefix(id[0].value);
var cat = $("#Category").data("kendoDropDownList");
cat.value(e.model.CategoryId);
cat.enable(false);
refreshTransactionType(e.model.CategoryId);
var planname = $("#PlanName").data("kendoDropDownList");
planname.value(e.model.PlanName);
var tt = $("#TransactionType").data("kendoDropDownList");
tt.value(e.model.TransactionType);
tt.enable(false);
//var ttt = tt.data("kendoDropDownList");
var txt = tt.text();
showTransactionFields(e, txt);
console.log("DD-Text=" + txt);
}
//$("#transactiongrid").data("kendoGrid").select(".k-grid-edit-row");
//grid.select(row);
}
function onTransactionCancel(e) {
}
function onTransactionDataBound(e) {
var grid = this;
adjustButtonPreview(grid);
//if (typeof rowselected != 'undefined') {
// $("#transactiongrid").data("kendoGrid").select(rowselected);
//}
}
function onTransactionSaveChanges(e) {
var tmp = e.container.find("input[name=TransactionType]"); // get the input element for the field
console.log("TransactionType is " + tmp[0].value); // set the value
e.model.TransactionType = tmp[0].value;
e.model.TypeName = $("#TransactionType").data("kendoDropDownList").text();
var tmp1 = e.container.find("input[name=Category]"); // get the input element for the field
console.log("Category is " + tmp1[0].value); // set the value
e.model.CategoryId = tmp1[0].value;
if ( '@Session["UplodedFile"]' != '') {
e.model.FileName = '@Session["UplodedFile"]';
}
}
function onTransactionDetailCollapse(e) {
var row = $(event.srcElement).closest("tr");
var grid = $("#transactiongrid").data("kendoGrid");
rowselected = row;
grid.select(row);
}
function onTransactionDetailExpand(e) {
var row = $(event.srcElement).closest("tr");
var grid = $("#transactiongrid").data("kendoGrid");
rowselected = row;
grid.select(row);
}
function onTransactionSave(e) {
console.log("Grid Save");
var tmp2 = e.container.find("input[name=PlanName]"); // get the input element for the field
console.log("PlanName is " + tmp2[0].value); // set the value
e.model.PlanName= tmp2[0].value;
e.model.TypePlanName = $("#PlanName").data("kendoDropDownList").text();
var tmp = e.container.find("input[name=TransactionType]"); // get the input element for the field
console.log("TransactionType is " + tmp[0].value); // set the value
e.model.TransactionType = tmp[0].value;
e.model.TypeName = $("#TransactionType").data("kendoDropDownList").text();
var tmp1 = e.container.find("input[name=Category]"); // get the input element for the field
console.log("Category is " + tmp1[0].value); // set the value
e.model.CategoryId = tmp1[0].value;
e.model.Category = $("#Category").data("kendoDropDownList").text();
if ( '@Session["UplodedFile"]' != '') {
e.model.FileName = '@Session["UplodedFile"]';
}
if (e.model.isNew()) {
var datepickerinput = e.container.find("input[name=EntryDate]"); // get the input element for the field
//var datepicker = datepickerinput.data("kendoDatePicker");
console.log("datepickerinput=" + datepickerinput[0].value);
e.model.EntryDate = datepickerinput[0].value;
e.model.CreatedOn = new Date();
e.model.CreatedById = '@Session["userId"]';
e.model.Status = '@Session["Status_Pending"]';
e.model.StatusName = 'Pending';
}
else {
e.model.ModifiedOn = new Date();
e.model.ModifiedById = '@Session["userId"]';
}
//if (typeof rowselected != 'undefined') {
// $("#transactiongrid").data("kendoGrid").select(rowselected);
//}
}
function callSetFilePrefix(id) {
var data = {};
data.id = id;
$.ajax({
type: "POST",
url: '@Url.Action("setFilePrefix", "TransUpload")',
//url: "/TransUpload/setFilePrefix",
data: JSON.stringify(data),
contentType: "application/json",
dataType: "json",
cache: false
}).done(function (response) {
console.log('callSetFilePrefix= ' + response);
}).fail(function (response) {
console.log('Error: ' + 'callSetFilePrefix= ' + response);
});
}
function addRowTransaction() {
var userNo = '@Session["userNumber"]';
callSetFilePrefix(userNo);
var grid = $("#transactiongrid").data("kendoGrid");
grid.addRow();
}
function adjustButtonPreview(grid) {
grid.tbody.find("tr[role='row']").each(function () {
var model = grid.dataItem(this);
if (model.Status != '@Session["Status_Pending"]') {
$(this).find(".k-grid-customCommand").removeClass("k-primary");
$(this).find(".k-grid-customCommand").addClass("k-state-disabled");
$(this).find(".k-grid-customCommand").addClass("k-btn-grayed");
$(this).find(".k-grid-edit").removeClass("k-outline-primary");
$(this).find(".k-grid-edit").addClass("k-state-disabled");
$(this).find(".k-grid-edit").addClass("k-btn-grayed");
} else {
$(this).find(".k-grid-customCommand").addClass("k-primary ");
$(this).find(".k-grid-edit").addClass("k-outline-primary");
}
});
}
// #endregion
// #region Upload Functions
function onUploadSelect(e) {
console.log("Select :: " + getFileInfo(e));
}
function onUploadUpload(e) {
console.log("Upload :: " + getFileInfo(e));
}
function onUploadSuccess(e) {
//debugger;
console.log("Success (" + e.operation + ") :: " + getFileInfo(e));
var upload = $("#files").data("kendoUpload"),
files = upload.getFiles();
console.log("You have selected " + files.length + " files");
console.log(files);
var txtfilename = $('input[name="FileName"]');
var myfileName = files.length > 0 ? files[0].name : '';
txtfilename.val(myfileName);
gridEdit.model.FileName = myfileName;
gridEdit.model.dirty = true;
}
function onUploadError(e) {
console.log("Error (" + e.operation + ") :: " + getFileInfo(e));
}
function onUploadComplete(e) {
console.log("Complete");
}
function onUploadCancel(e) {
console.log("Cancel :: " + getFileInfo(e));
}
function onUploadRemove(e) {
console.log("Remove :: " + getFileInfo(e));
}
function onUploadProgress(e) {
console.log("Upload progress :: " + e.percentComplete + "% :: " + getFileInfo(e));
}
function getFileInfo(e) {
return $.map(e.files, function (file) {
var info = file.name;
if (file.size > (5 * 1024 * 1024)) {
return false;
}
return true;//info;
});
}
// #endregion
// #region Dropdown Events
function onDDTransactionTypeChange(e) {
if (e.item) {
var dataItem = this.dataItem(e.item);
//if ( dataItem.Text
console.log("event :: Change (" + dataItem.Text + " : " + dataItem.Value + ")");
} else {
console.log("event :: Change");
}
}
function onDDTransactionTypeSelect(e) {
if (e.item) {
var txt = e.item[0].innerText;
console.log("Selected Text = " + txt);
console.log(txt.indexOf("issuance") < 0);
showTransactionFields(e, txt);
} else {
console.log("event :: select");
}
}
function onChangeCategory(e) {
var catval = $("#Category").data("kendoDropDownList").value();
refreshTransactionType(catval);
}
function refreshTransactionType(categoryValue) {
var tt = $("#TransactionType").data("kendoDropDownList");
var ttData = tt.dataSource;
ttData.data([]); tt.text(""); tt.value(""); hideAll();
var ttList = '@Session["StrTransactionTypeList"]';
var ttListAr = ttList.split('|');
for (var i = 0; i < ttListAr.length; i++) {
var ttListArItem = ttListAr[i].split('^');
if (ttListArItem[0] == categoryValue) {
ttData.add({ "Id": ttListArItem[1], "Name": ttListArItem[2] });
}
}
}
// #endregion
// #region Show/Hide Transaction Fields
function showTransactionFields(e, txt) {
hideAll();
var effectiveDate = gridEdit.container.find("label[for=TransactionEffectiveDate]");
effectiveDate[0].innerText = 'Effective Date';
if (txt.toLowerCase().indexOf("issuance") > 0) {
showFieldsByClass("issuance");
}
else if (txt.toLowerCase().indexOf("release") > 0) {
showFieldsByClass("release");
}
else if (txt.toLowerCase() == "annuity") {
showFieldsByClass("annuity");
}
else if (txt.toLowerCase().indexOf("grant") > 0) {
showFieldsByClass("Grant");
}
else if (txt.toLowerCase().indexOf("vesting") > 0) {
showFieldsByClass("Vesting");
}
else if (txt.toLowerCase().indexOf("treasury") > 0) {
showFieldsByClass("Treasury");
}
else if (txt.toLowerCase().indexOf("repurchase") > 0) {
showFieldsByClass("Repurchase");
effectiveDate[0].innerText = 'Settlement Date';
}
}
function showFieldsByClass(className) {
var i; var x = null;
x = document.getElementsByClassName(className);
for (i = 0; i < x.length; i++) {
x[i].style.display = "";
}
}
function hideFieldsByClass(className) {
var i; var x = null;
x = document.getElementsByClassName(className);
for (i = 0; i < x.length; i++) {
x[i].style.display = "none";
}
}
function hideAll() {
hideFieldsByClass("issuance");
hideFieldsByClass("release");
hideFieldsByClass("annuity");
hideFieldsByClass("Grant");
hideFieldsByClass("Vesting");
hideFieldsByClass("Treasury");
hideFieldsByClass("Repurchase");
}
function hideTransactionId() {
hideFieldsByClass("TransactionId");
}
// #endregion
// #region Show Preview Letter & Send Email
function showPreview(e) {
e.preventDefault();
var row = $(event.srcElement).closest("tr");
var grid = $("#transactiongrid").getKendoGrid();
console.log(row);
grid.select(row);
var dataItem = grid.dataItem(row);
console.log("TransactionId: " + dataItem.Id);
grid.tbody.find("tr[role='row']")
rowselected = row;
var data = {};
data.TransactionId = dataItem.Id;
$.ajax({
type: "POST",
url: '@Url.Action("GetPreviewLetter", "Transaction")',
data: JSON.stringify(data),
contentType: "application/json",
dataType: "json",
cache: false
}).done(function (data) {
console.log('data= ' + data);
var wnd = $("#windowPreview").data("kendoWindow");
wnd.content(data);
wnd.center().open();
}).fail(function (data) {
console.log('Error-GetPreviewLetter: ' + data);
});
}
var emailLetterFunc = function emailLetter() {
$.ajax({
type: "POST",
url: '@Url.Action("SendMail", "Transaction")',
cache: false
}).done(function (data) {
console.log('data= ' + data);
if (!data.toLowerCase().includes("error") && !data.toLowerCase().includes("failure")) {
if (data.toLowerCase().includes("already emailed")) {
$("#windowPreview").data("kendoWindow").close();
alertBox(2, data, '', 7000);
}
else {
$("#windowPreview").data("kendoWindow").close();
$("#transactiongrid").data("kendoGrid").dataSource.read();
$("#transactiongrid").data("kendoGrid").dataSource.sync();
alertBox(0, "Letter emailed !", '', 8000);
}
}
else {
$("#windowPreview").data("kendoWindow").close();
alertBox(2, "Sending Letter Error !\n" + data, '', 12000);
}
}).fail(function (data) {
console.log('Error Connecting Send Email: \n' + data);
});
}
function cancelemailLetter() {
$("#windowPreview").data("kendoWindow").close();
}
function onWindowClose() {
console.log("Popup Window Closed");
}
function emailLetterconfirm() {
alertboxmodal("Are You Sure Want to Send Email to ComputerShare?" //message
, "Sending Email to ComputerShare" //title
, "Equity Management" //footer
, emailLetterFunc); //callback function for OK
}
// #endregion
// #region Custom Validation Rules
(function ($, kendo) {
$.extend(true, kendo.ui.validator, {
rules: {
requiredif: function (input) {
var tmp = input[0].attributes["data-val-requiredif"];
if (typeof tmp != 'undefined') {
var requiredifExists = input[0].attributes["data-val-requiredif"].value;
var requirediffield = input[0].attributes["data-val-requiredif-field"].value;
var requiredifvalues = input[0].attributes["data-val-requiredif-values"].value;
var v = $("input[name=" + requirediffield + "]")[0].value
var requiredifvaluesArray = requiredifvalues.split('|');
var match = false;
for (var i = 0; i < requiredifvaluesArray.length; i++) {
if (requiredifvaluesArray[i] == v) {
match = true;
break;
}
}
if (match) {
if ((input[0].value == '') || (input[0].value == null)) {
return false;
}
}
}
return true;
}
},
messages: {
requiredif: function (input) {
return input[0].attributes["data-val-requiredif"].value;
}
}
});
})(jQuery, kendo);
// #endregion
// #region AlertBox
//to Start the Alert Box, Selecting Mode(Success(Default=any value), Warning=2, Error=3, Info=4),
//Set Message, Title, Position and Show/Animate the Box
function alertBox(action, msg, title, alerttime) {
var scroll_pos = (0);
var scrollTop = 0;
$('html, body').animate({ scrollTop: (scroll_pos) }, '2000');
switch (action) {
case 2://warn
$("#msgIcon")[0].src = "../Images/_warn.png"
$("#msg").css({ background: '#fae780', color: 'Black', border: '4px #4b4002' });
if (title == '') { title = 'Warning'; }
alertBoxMsg(msg, title, alerttime);
break;
case 3://error
$("#msgIcon")[0].src = "../Images/_error.png"
$("#msg").css({ background: '#f75656', color: 'Black', border: '4px #680707' });
if (title == '') { title = 'Error'; }
alertBoxMsg(msg, title, alerttime);
break;
case 4://info
$("#msgIcon")[0].src = "../Images/_info.png"
$("#msg").css({ background: '#35f9f9', color: 'Black', border: '4px #055e5f' });
if (title == '') { title = 'Information'; }
alertBoxMsg(msg, title, alerttime);
break;
default://success
$("#msgIcon")[0].src = "../Images/_success.png"
$("#msg").css({ background: '#0d005d', color: 'white', border: '4px black' });
if (title == '') { title = 'Success'; }
alertBoxMsg(msg, title, alerttime);
}
}
function alertBoxShow(msg, mytime) {
alertBoxPos();
var ret = setwidth(msg);
$("#msg").animate({ top: '30px', width: ret + '%', left: (98 - ret) + '%' });
setTimeout(() => {
$("#msg").animate({ top: '-50%' });
setTimeout(() => { $("#msg").css({ visibility: 'hidden' }); }, 500);
}, mytime);
}
//to Initiate the Alert Box Position, start mode
function alertBoxPos() {
$("#msg").css({ top: '30px', left: '105%' });
$("#msg").css({ visibility: 'visible' });
}
//to Set the Alert Box Message and Title, then Show the Box
function alertBoxMsg(msg, title, mytime) {
$("#mymsg").text(msg);
$("#mymsgtitle").text(title);
setwidth(msg);
alertBoxShow(msg, mytime);
}
function setwidth(msg) {
var val = msg.length;
var ret = 30;
if ((200 <= val) && (val < 500)) { ret = 60; }
else {
if (500 <= val) { ret = 90; }
}
return ret;
}
// #endregion
// #region AlertBox Modal
var ModalDlgState = -1;
var modal = document.getElementById("alertboxmodal");
function alertboxclose() {
modaldlgclick(0);
}
function modaldlgclick(ModalDlgValue) {
ModalDlgState = ModalDlgValue;
closeModal();
}
function closeModal() {
modal.style.display = "none";
}
function alertboxmodalinit(msg, title, footer) {
var alertboxtitle = document.getElementById("alertboxtitle");
alertboxtitle.innerText = title;
var alertboxmsg = document.getElementById("alertboxmsg");
alertboxmsg.innerText = msg;
var alertboxftr = document.getElementById("alertboxftr");
alertboxftr.innerText = footer;
ModalDlgState = -1;
modal.style.display = "block";
}
var waitfunc = null;
var wait = function (condFunc, readyFunc, checkInterval) {
var checkFunc = function () {
if (condFunc()) {
readyFunc();
}
else {
waitfunc = setTimeout(checkFunc, checkInterval);
}
};
checkFunc();
};
function alertboxmodal(msg, ttl, ftr, OKFunction, CancelFunction) {
alertboxmodalinit(msg, ttl, ftr);
wait(
function () { return ((ModalDlgState >= 0) || (new Date().getSeconds() == 10)); },
function () {
clearTimeout(waitfunc);
console.log("Done");
if (ModalDlgState > 0) {
if (typeof OKFunction != 'undefined') {
OKFunction();
}
}
else {
if (typeof CancelFunction != 'undefined') {
CancelFunction();
}
}
},
100
);
return ModalDlgState;
}
// #endregion
// #region Custom Delete Transaction
var rowToDelete = null;
function deleteTransaction() {
var row = $(event.srcElement).closest("tr");
var grid = $("#transactiongrid").data("kendoGrid");
rowselected = row;
grid.select(row);
$("#transactiongrid").data("kendoGrid").removeRow(rowToDelete); // remove the row
}
function deleteTransactionconfirm(e) {
var dataItem = $("#transactiongrid").data("kendoGrid").dataSource.get(e);
rowToDelete = $("#transactiongrid").data("kendoGrid").tbody.find("tr[data-uid='" + dataItem.uid + "']");
alertboxmodal("Are You Sure You Want to DELETE the Selected Transaction?" //message
, "DELETE the Transaction" //title
, "Equity Management" //footer
, deleteTransaction); //callback function for OK
}
// #endregion
//////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////// Download Attachment File
//////////////////////////////////////////////////////////////////////////////////////////////////
function downloadFile(id) {
debugger;
var mypath='@Url.Action("GetFile", "Transaction")' + "?Id=" + id;
window.location = mypath;
}
//////////////////////////////////////////////////////////////////////////////////////////////////
function onChangeNumericNegative() {
debugger;
var value = this.value();
if (value > 0) {
value = -1 * value;
this._old = this._value;
this._value = value;
this._text.val(this._value);
this.element.val(this._value);
gridEdit.model.set(this.element[0].id, value);
}
}
color:yellow;
background-color:blue;
text-decoration: underline;
text-decoration-color: red;
}
https://dojo.telerik.com/IFejITAV
change: function(e){
$("tr.k-state-selected").hover(function(){
$(this).find("td").css("color", "red")
})
$("tr.k-state-selected").mouseleave(function(){
$(this).find("td").css("color", "black")
})
},
color:red;
}
color:yellow;
background-color:blue;
text-decoration: underline;
text-decoration-color: red;
}
using System; using System.Configuration; using System.Data; using System.Data.SqlClient; using System.IO; using System.Text; using System.Web;
namespace Data { public class UploadFileData { public char delimiterFile { get; set; } = '`'; //Method to put file into database from drive: public void databaseFilePut(string varFilePath, int LinkId, int Action, string tabelName, string dataFieldName, string fileFieldName, string idFieldName)//Action: (0=Add, 1=UPDATE) { byte[] file; var justFile = varFilePath.ToString().Split(delimiterFile); using (var stream = new FileStream(varFilePath, FileMode.Open, FileAccess.Read)) { using (var reader = new BinaryReader(stream)) { file = reader.ReadBytes((int)stream.Length); } } string connectionString = ConfigurationManager.ConnectionStrings["EQM"].ConnectionString; using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); if (Action == 0) {//ADD
//string sql = "INSERT INTO [eqmuser].[Transaction] (Attachments, TransactionId, fileName) Values(@File, @TransactionId, @fileName)";
string sql = "INSERT INTO " + tabelName + " (" + dataFieldName + ", " + idFieldName + "," + fileFieldName + ") Values(@File, @TransactionId, @fileName)";
using (SqlCommand command = new SqlCommand(sql, connection))
{
command.Parameters.Add("@File", SqlDbType.VarBinary, file.Length).Value = file;
command.Parameters.Add("@TransactionId", SqlDbType.Int).Value = LinkId;
command.Parameters.Add("@fileName", SqlDbType.VarChar, justFile[1].Length).Value = justFile[1];
command.ExecuteNonQuery();
}
}
else
{//update
//string sql = "Update [eqmuser].[Transaction] set Attachments=@File, fileName=@fileName Where Id=@TransactionId";
string sql = "Update " + tabelName + " set " + dataFieldName + "=@File, " + fileFieldName + "=@fileName Where " + idFieldName + "=@TransactionId";
using (SqlCommand command = new SqlCommand(sql, connection))
{
command.Parameters.Add("@File", SqlDbType.VarBinary, file.Length).Value = file;
command.Parameters.Add("@TransactionId", SqlDbType.Int).Value = LinkId;
command.Parameters.Add("@fileName", SqlDbType.VarChar, justFile[1].Length).Value = justFile[1];
command.ExecuteNonQuery();
}
}
}
}
//This method is to get file from database and save it on drive:
public void databaseFileRead(string varID, string varPathToNewLocation, string tabelName, string dataFieldName, string idFieldName)
{
string connectionString = ConfigurationManager.ConnectionStrings["EQM"].ConnectionString;
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
//string sql = @"SELECT [Attachments] FROM [EQMUser].[Transaction] WHERE [AttachmentId] = @varID";
string sql = @"SELECT " + dataFieldName + " FROM " + tabelName + " WHERE " + idFieldName + " = @varID";
using (SqlCommand sqlQuery = new SqlCommand(sql, connection))
{
sqlQuery.Parameters.AddWithValue("@varID", varID);
using (var sqlQueryResult = sqlQuery.ExecuteReader())
if (sqlQueryResult != null)
{
sqlQueryResult.Read();
var blob = new Byte[(sqlQueryResult.GetBytes(0, 0, null, 0, int.MaxValue))];
sqlQueryResult.GetBytes(0, 0, blob, 0, blob.Length);
using (var fs = new FileStream(varPathToNewLocation, FileMode.Create, FileAccess.Write))
fs.Write(blob, 0, blob.Length);
}
}
}
}
//This method is to get file from database and put it as MemoryStream
//public MemoryStream databaseFileReadArray(string varID, string tabelName, string dataFieldName, string idFieldName)
public byte[] databaseFileReadArray(string varID, string tabelName, string dataFieldName, string idFieldName)
{
MemoryStream memoryStream = new MemoryStream();
//string result = "";
byte[] blob = new byte[] { };
try
{
string connectionString = ConfigurationManager.ConnectionStrings["EQM"].ConnectionString;
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
//string sql = @"SELECT [Attachments] FROM [EQMUser].[Transaction] WHERE [AttachmentId] = @varID";
string sql = @"SELECT " + dataFieldName + " FROM " + tabelName + " WHERE " + idFieldName + " = @varID";
using (SqlCommand sqlQuery = new SqlCommand(sql, connection))
{
sqlQuery.Parameters.AddWithValue("@varID", varID);
using (var sqlQueryResult = sqlQuery.ExecuteReader())
if (sqlQueryResult != null)
{
sqlQueryResult.Read();
blob = new Byte[(sqlQueryResult.GetBytes(0, 0, null, 0, int.MaxValue))];
sqlQueryResult.GetBytes(0, 0, blob, 0, blob.Length);
//using (var fs = new MemoryStream(memoryStream, FileMode.Create, FileAccess.Write)) {
//memoryStream.Write(blob, 0, blob.Length);
//}
//result = Encoding.UTF8.GetString(blob, 0, blob.Length);
}
}
//return memoryStream;
//string result = memoryStream.ReadToEnd();
}
}
catch (Exception ex)
{
//result = "ERROR: " + ex.ToString();
//throw ex;
}
return blob;
}
//This method is to put MemoryStream into database:
public int databaseFilePut(MemoryStream fileToPut, string tabelName, string dataFieldName, string idFieldName)
{
int varID = 0;
byte[] file = fileToPut.ToArray();
string preparedCommand =
"INSERT INTO " + tabelName + " (" + dataFieldName + ") VALUES (@File) "
+ " SELECT " + idFieldName + " FROM " + tabelName + " WHERE " + idFieldName + " = SCOPE_IDENTITY()";
//@"INSERT INTO [EQMUser].[Transaction] ([Attachments]) VALUES (@File)
// SELECT [AttachmentId] FROM [EQMUser].[Transaction] WHERE [AttachmentId] = SCOPE_IDENTITY()";
string connectionString = ConfigurationManager.ConnectionStrings["EQM"].ConnectionString;
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
using (SqlCommand sqlWrite = new SqlCommand(preparedCommand, connection))
{
sqlWrite.Parameters.Add("@File", SqlDbType.VarBinary, file.Length).Value = file;
using (var sqlWriteQuery = sqlWrite.ExecuteReader())
while (sqlWriteQuery != null && sqlWriteQuery.Read())
{
varID = sqlWriteQuery["AttachmentId"] is int ? (int)sqlWriteQuery["AttachmentId"] : 0;
}
}
return varID;
}
}
}
}
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc;
using System.IO; using EQM.Helper;
namespace EQM.Controllers { public class TransUploadController : BaseController { [OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")] [HttpPost] public void setFilePrefix(string id) { Tools.filePrefix = Convert.ToString(id) + Tools.delimiterFile; Session["UplodedFile"] = ""; }
public ActionResult Async()
{
return View();
}
public ActionResult Async_Save(IEnumerable<HttpPostedFileBase> files)
{
if (files != null)
{
foreach (var file in files)
{
var fileName = Path.GetFileName(file.FileName);
var physicalPath = Path.Combine(Server.MapPath("~/App_Data"), Tools.filePrefix + fileName);
if (System.IO.File.Exists(physicalPath)) {
System.IO.File.Delete(physicalPath);
}
file.SaveAs(physicalPath);
Session["UplodedFile"] = fileName;
//fileDB.databaseFilePut(physicalPath, 3, 1);
}
}
return Content("");
}
public ActionResult Async_Remove(string[] fileNames)
{
if (fileNames != null)
{
foreach (var fullName in fileNames)
{
var fileName = Path.GetFileName(fullName);
var physicalPath = Path.Combine(Server.MapPath("~/App_Data"), Tools.filePrefix + fileName);
if (System.IO.File.Exists(physicalPath))
{
System.IO.File.Delete(physicalPath);
}
Session["UplodedFile"] = "";
}
}
return Content("");
}
}
}
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Data; using Entitites; using EQM.Enumerations;
namespace Business
{
public class BusUploadFile
{
///
/// Otherwise, filter the category by their role.
///
RequiredIf,