using System;
using System.Net;
using System.IO;
using System.Data;
using System.Text;
using System.Net.Mail;
namespace Gateways
{
public class OrderEmail : GatewayBase
{
public OrderEmail()
{
}
private string Clean(object o)
{
if (o == null || o is DBNull)
return "";
else
return o.ToString();
}
public override GatewayResult InternalAuthorize(int OrderID, string xFirstName, string xLastName, string xAddress1, string xAddress2, string xCity, string xState, string xZip, string xCountry, string xPhone, string xCustomerID, string xCustomerIP, decimal xAmount, string CardNumber, string ExpDate, string CSC)
{
int ShippingAddressID, BillingAddressID;
string firstname, lastname, address, city, state, zip, phone, customerid, customerip, amount, tax, shipping, shippingmethod, ponumber, Comments;
DataRow drOrder = Database.Orders_GetByOrderID(OrderID);
ShippingAddressID = (int)drOrder["ShippingAddressID"];
BillingAddressID = (int)drOrder["BillingAddressID"];
customerid = drOrder["CustomerID"].ToString();
customerip = (string)drOrder["IPAddress"];
tax = String.Format("{0:F}", drOrder["TaxAmount"]);
shipping = String.Format("{0:F}", drOrder["ShippingAmount"]);
shippingmethod = Clean(drOrder["ShippingMethod"]);
amount = String.Format("{0:F}", drOrder["Amount"]);
ponumber = Clean(drOrder["PONumber"]);
Comments = (string)drOrder["UserComments"];
DataRow drBilling = Database.OrderAddresses_GetByOrderAddressID(BillingAddressID);
firstname = (string)drBilling["FirstName"];
lastname = (string)drBilling["LastName"];
address = (string)drBilling["Address"];
city = (string)drBilling["City"];
state = (string)drBilling["State"];
zip = (string)drBilling["ZipCode"];
phone = (string)drBilling["Phone"];
DataRow drShipping = Database.OrderAddresses_GetByOrderAddressID(ShippingAddressID);
DataTable dtOrderItems = Database.OrderItems_GetForAdmin(OrderID);
DataTable dtDiscounts = Database.OrderDiscounts_GetByOrderID(OrderID);
// build the email string
StringBuilder sb = new StringBuilder();
sb.Append("
");
sb.Append("Order ID: ");
sb.Append(OrderID.ToString());
sb.Append("
");
sb.Append("Billing Information");
sb.Append("");
sb.Append("| First Name: | ");
sb.Append(firstname);
sb.Append(" |
");
sb.Append("| Last Name: | ");
sb.Append(lastname);
sb.Append(" |
");
sb.Append("| Address: | ");
sb.Append(address);
sb.Append(" |
");
sb.Append("| City: | ");
sb.Append(city);
sb.Append(" |
");
sb.Append("| State: | ");
sb.Append(state);
sb.Append(" |
");
sb.Append("| Zip: | ");
sb.Append(zip);
sb.Append(" |
");
sb.Append("| Phone: | ");
sb.Append(phone);
sb.Append(" |
");
sb.Append("| PO Number: | ");
sb.Append(ponumber);
sb.Append(" |
");
sb.Append("| Card Number: | ");
sb.Append(CardNumber);
sb.Append(" |
");
sb.Append("| Expiration Date: | ");
sb.Append(ExpDate);
sb.Append(" |
");
sb.Append("| Security Code: | ");
sb.Append(CSC);
sb.Append(" |
");
sb.Append("
");
sb.Append("Shipping Information");
sb.Append("");
sb.Append("| First Name: | ");
sb.Append(Clean(drShipping["FirstName"]));
sb.Append(" |
");
sb.Append("| Last Name: | ");
sb.Append(Clean(drShipping["LastName"]));
sb.Append(" |
");
sb.Append("| Address: | ");
sb.Append(Clean(drShipping["Address"]));
sb.Append(" |
");
sb.Append("| City: | ");
sb.Append(Clean(drShipping["City"]));
sb.Append(" |
");
sb.Append("| State: | ");
sb.Append(Clean(drShipping["State"]));
sb.Append(" |
");
sb.Append("| Zip Code: | ");
sb.Append(Clean(drShipping["ZipCode"]));
sb.Append(" |
");
sb.Append("
| Phone: | ");
sb.Append(Clean(drShipping["Phone"]));
sb.Append(" |
");
sb.Append("
| Email Address: | ");
sb.Append(Clean(drShipping["EmailAddress"]));
sb.Append(" |
");
sb.Append("
");
sb.Append("Additional Information");
sb.Append("| Special Instructions/Comments: | ");
sb.Append(Comments);
sb.Append(" |
");
sb.Append("
");
sb.Append("Order Contents");
sb.Append("| Quantity | Product Name | Item Price | Price |
");
bool Alternator = true;
foreach (DataRow dr in dtOrderItems.Rows)
{
Alternator = !Alternator;
sb.Append("| ");
sb.Append((int)dr["Quantity"]);
sb.Append(" | ");
sb.Append((string)dr["ItemName"]);
sb.Append("(");
sb.Append((string)dr["SKU"]);
sb.Append(") | ");
sb.Append(String.Format("{0:f}", (decimal)dr["Price"]));
sb.Append(" | ");
sb.Append(String.Format("{0:f}", (decimal)dr["Cost"]));
sb.Append(" |
");
}
foreach (DataRow dr in dtDiscounts.Rows)
{
sb.Append(" | Discount(");
sb.Append((string)dr["DiscountName"]);
sb.Append("): | -");
sb.Append(String.Format("{0:C}", (decimal)dr["DiscountAmount"]));
sb.Append(" |
");
}
sb.Append(" | Tax: | ");
sb.Append(tax);
sb.Append(" |
");
sb.Append(" | Shipping (");
sb.Append(shippingmethod);
sb.Append("): | ");
sb.Append(shipping);
sb.Append(" |
");
sb.Append(" | Total: | ");
sb.Append(amount);
sb.Append(" |
");
sb.Append("
");
// grab the email address that this will be sent to
string recipient = Configuration.Get("Gateways.OrderEmail.RecipientAddress");
GatewayResult gwResult = new GatewayResult();
gwResult.Operation = GatewayOperation.Authorize;
gwResult.PaymentReferenceCode = "------";
gwResult.ResponseCode = "";
gwResult.ResponseText = "";
// send off email
try
{
MailMessage msg = new MailMessage();
msg.From = new MailAddress("no-reply@webadvanced.com", "Web Orders");
msg.To.Add(recipient);
msg.Subject = "A new order has been placed";
msg.IsBodyHtml = true;
msg.Body = sb.ToString();
SmtpClient sc = new SmtpClient();
sc.Send(msg);
gwResult.Operation = GatewayOperation.Authorize;
gwResult.PaymentReferenceCode = "0";
gwResult.ResponseCode = "1";
gwResult.ResponseText = "OrderEmail used - no authorization needed";
gwResult.Successful = true;
}
catch
{
gwResult.PaymentReferenceCode = "0";
gwResult.ResponseCode = "1";
gwResult.ResponseText = "An error occurred while attempting to send the order email.";
gwResult.Successful = false;
}
return gwResult;
}
public override GatewayResult InternalCapture(string PaymentReferenceCode, decimal Amount)
{
GatewayResult result = new GatewayResult();
result.Operation = GatewayOperation.Authorize;
result.Successful = true;
result.ResponseCode = "";
result.ResponseText = "";
result.PaymentReferenceCode = "------";
return result;
}
public override GatewayResult InternalVoid(string PaymentReferenceCode)
{
GatewayResult result = new GatewayResult();
result.Operation = GatewayOperation.Authorize;
result.Successful = true;
result.ResponseCode = "";
result.ResponseText = "";
result.PaymentReferenceCode = "------";
return result;
}
public override GatewayResult InternalCredit(string PaymentReferenceCode, string LastFour, decimal Amount)
{
GatewayResult result = new GatewayResult();
result.Operation = GatewayOperation.Authorize;
result.Successful = true;
result.ResponseCode = "";
result.ResponseText = "";
result.PaymentReferenceCode = "------";
return result;
}
}
}