There are two methods to call POS printer to print
- PrintGuestCheck
- PayBill_Print
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Claims;
using System.Threading.Tasks;
using Tawoon.IT_SoftwareTemplate.BusinnessModels.BaseVM.Dashboard;
using Tawoon.IT_SoftwareTemplate.BusinnessModels.Enum;
using Tawoon.IT_SoftwareTemplate.Entities;
using Tawoon.IT_SoftwareTemplate.Entities.Models;
using System.IO;
using System.Drawing.Printing;
using System.Drawing;
using System.Net.Sockets;
using System.Text;
using Microsoft.AspNetCore.Hosting;
using Tawoon.IT_SoftwareTemplate.BusinnessModels.BaseVM;
using Microsoft.Extensions.Options;
using Tawoon.IT_SoftwareTemplate.Helper;
using Microsoft.AspNetCore.Http;
using System.Drawing.Imaging;
namespace Tawoon.IT_SoftwareTemplate.Controllers
{
public class DashboardController : Controller
{
private readonly ApplicationDbContext _context;
private readonly UserManager _userManager;
private readonly IHostingEnvironment _env;
private readonly IOptions _config;
private readonly UtilityFunctions _utilityFunctions;
int tableIdGlobal = 0;
double receivedAmount = 0;
int paymentMethodId = 0;
double returnAmount = 0;
double dueAmount = 0;
int lineHeight = 8;
int CountLineNumber = 1;
const char ESC ='\x1b';
const char FS = '\x1c';
const char GS = '\x1d';
public DashboardController(UtilityFunctions utilityFunctions, IOptions config,IHostingEnvironment env,ApplicationDbContext context, UserManager userManager )
{
_context = context;
_userManager = userManager;
this._env = env;
_config = config;
_utilityFunctions = utilityFunctions;
}
private void TcpPrint(string host, byte[] data)
{
Socket s = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
s.Connect(host, 9100);
s.Send(data);
s.Disconnect(false);
}
private byte[] GetPrintData( List MenuList, string TableName, int OrderId, string cookingDeptname)
{
StringBuilder sb = new StringBuilder();
// Initialize printer
sb.Append(ESC + "@");
// Align center
sb.Append(ESC + "a" + (char)1);
// Use bold
sb.Append(ESC + "E" + (char)1);
// Add header text
sb.Append(_config.Value.CompanyName+"\n");
sb.AppendFormat("{0}\n\n", cookingDeptname);
sb.AppendFormat("Table No-{0}\n", TableName);
sb.AppendFormat("Order No-{0}\n\n", OrderId);
sb.AppendFormat("Date'{0}' ", DateTime.Now.ToShortDateString());
sb.AppendFormat("Time-'{0}'\n\n", DateTime.Now.ToShortTimeString());
// Revert to align left and normal weight
sb.Append("Order List\n");
sb.Append("-----------------\n");
sb.Append(ESC + "a" + (char)0);
sb.Append(ESC + "E" + (char)0);
int count = 1;
foreach (var item in MenuList)
{
sb.AppendFormat(count+". {0}:{1}\n",item.MenuName, item.Qty );
}
// Format some text
sb.Append("\n\n\n");
// Feed and cut paper
sb.Append(GS + "V\x41\0");
return Encoding.Default.GetBytes(sb.ToString());
}
public IActionResult AdminDashboard()
{
return View();
}
public IActionResult SalesDashboard()
{
var sd = _context.DailyCashBooks.Select(x => new DailyCashBook
{
Id = x.Id,
IsOpenningDone = x.IsOpenningDone,
CreatedDate = x.CreatedDate
}).ToList();
var ss = sd.SingleOrDefault(x => x.CreatedDate.ToString("MM/dd/yyyy") == DateTime.Today.Date.ToString("MM/dd/yyyy")).IsOpenningDone;
if (ss)
{
return View();
}
else
{
return RedirectToAction("OpenningAmount");
}
}
public IActionResult OpenningAmount()
{
return View();
}
public IActionResult Cashout()
{
return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public async Task OpenningAmount(DailyCashBook dailyCashBook)
{
if (ModelState.IsValid)
{
try
{
var sd = _context.DailyCashBooks.Select(x => new DailyCashBook
{
Id = x.Id,
IsOpenningDone = x.IsOpenningDone,
CreatedDate = x.CreatedDate
}).ToList();
var model = sd.SingleOrDefault(x => x.CreatedDate.ToString("MM/dd/yyyy") == DateTime.Today.Date.ToString("MM/dd/yyyy"));
model.OpnenningAmount = dailyCashBook.OpnenningAmount;
model.UserId = User.FindFirstValue(ClaimTypes.NameIdentifier);
model.OpenningTime = DateTime.Now;
model.IsOpenningDone = true;
_context.Update(model);
await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
if (!DailyCashBookExists(dailyCashBook.Id))
{
return NotFound();
}
else
{
throw;
}
}
return RedirectToAction(nameof(SalesDashboard));
}
return View(dailyCashBook);
}
private bool DailyCashBookExists(int id)
{
return _context.DailyCashBooks.Any(e => e.Id == id);
}
public IActionResult ClossingAmount()
{
return View();
}
public async Task OrderDetails(int id)
{
if (id == null)
{
return NotFound();
}
var diningtable = await _context.Diningtables.FindAsync(id);
ViewData["TableId"] = id;
ViewData["TableName"] = diningtable.Name;
ViewData["tableStatus"] = diningtable.Status;
if (diningtable.Status == "Busy")
{
var Order = _context.Orders.Where(x => x.DiningtableId == id).FirstOrDefault();
var Employee = _context.Employees.Find(Order.EmployeeId);
ViewData["EmployeeId"] = Employee.Id;
ViewData["EmployeeName"] = Employee.FistName + " " + Employee.LastName;
}
else
{
ViewData["EmployeeId"] = "";
ViewData["EmployeeName"] = "";
}
return View();
}
[HttpPost]
public object GetAllItemByTableNo([FromBody] int data)
{
var orders = _context.Orders.Where(x => x.DiningtableId == data && x.IsPrinted == false).ToList();
List orderDetailsMulti = new List();
foreach (var item in orders)
{
var OrderDetailsDb = _context.Orderdetails.Where(x => x.OrderId == item.Id).ToList();
var orderDetailsToPrint = OrderDetailsDb.Join(_context.Menus, od => od.MenuId, m => m.Id, (od, m) => new OrderDetailsForPrint
{
Id = m.Id,
MenuName = m.Name,
Qty = od.Quantity,
CookingDeptId = m.CookingDepartmentId,
Price = m.Price.ToString()
}).ToList();
orderDetailsMulti.AddRange(orderDetailsToPrint);
}
List orderDetails = new List();
int qty = 0;
foreach (var item in orderDetailsMulti)
{
var MenuFound = orderDetails.Find(x => x.MenuName == item.MenuName);
if (MenuFound != null)
{
orderDetails.Find(x => x.MenuName == item.MenuName).Qty = (Convert.ToInt32(orderDetails.Find(x => x.MenuName == item.MenuName).Qty) + Convert.ToInt32(item.Qty)).ToString();
}
else
{
orderDetails.Add(item);
}
}
return orderDetails;
}
[HttpPost]
public bool PrintGuestCheck([FromBody] int data)
{
var orders = _context.Orders.Where(x => x.DiningtableId == data && x.IsPrinted == false).ToList();
tableIdGlobal = data;
PrintDocument prtdoc = new PrintDocument();
string strDefaultPrinter = prtdoc.PrinterSettings.PrinterName;
prtdoc.OriginAtMargins = true;
prtdoc.DefaultPageSettings.Landscape = true;
PrintDocument pd = new PrintDocument();
PaperSize ps = new PaperSize("", 285, 520); //paper size
pd.PrintPage += new PrintPageEventHandler(printPOSPage);
pd.PrintController = new StandardPrintController();
pd.DefaultPageSettings.Margins.Left = 0;
pd.DefaultPageSettings.Margins.Right = 0;
pd.DefaultPageSettings.Margins.Top = 0;
pd.DefaultPageSettings.Margins.Bottom = 10;
// pd.DefaultPageSettings.PaperSize = ps;
pd.Print();
return true;
}
private void printPOSPage(object sender, PrintPageEventArgs e)
{
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
Encoding.GetEncoding("windows-1252");
var orders = _context.Orders.Where(x => x.DiningtableId == tableIdGlobal && x.IsPrinted == false).ToList();
double discount = orders.FirstOrDefault().DiscountAmount;
List orderDetailsMulti = new List();
foreach (var item in orders)
{
var OrderDetailsDb = _context.Orderdetails.Where(x => x.OrderId == item.Id).ToList();
var orderDetailsToPrint = OrderDetailsDb.Join(_context.Menus, od => od.MenuId, m => m.Id, (od, m) => new OrderDetailsForPrint
{
Id = m.Id,
MenuName = m.Name,
Qty = od.Quantity,
CookingDeptId = m.CookingDepartmentId,
Price = m.Price.ToString()
}).ToList();
orderDetailsMulti.AddRange(orderDetailsToPrint);
}
List orderDetails = new List();
int qty = 0;
foreach (var item in orderDetailsMulti)
{
var MenuFound = orderDetails.Find(x => x.MenuName == item.MenuName);
if (MenuFound != null)
{
orderDetails.Find(x => x.MenuName == item.MenuName).Qty = (Convert.ToInt32(orderDetails.Find(x => x.MenuName == item.MenuName).Qty) + Convert.ToInt32(item.Qty)).ToString();
}
else
{
orderDetails.Add(item);
}
}
Graphics g = e.Graphics;
// Head Takes = 50 Char
// Regular Takes = 62 Char
// Product
Font Head = new Font("Arial Narrow", 10, FontStyle.Regular);
Font Regular = new Font("Arial Narrow", 8, FontStyle.Regular);
Font RegularBold = new Font("Arial Narrow", 8, FontStyle.Bold);
SolidBrush sb = new SolidBrush(Color.Black);
var stream = _env.WebRootFileProvider.GetFileInfo(_config.Value.LogoPath).CreateReadStream();
Image Logo = Image.FromStream(stream);
e.Graphics.DrawImage(Logo, 30, 0, 200, 80);
g.DrawString(_config.Value.CompanyName, Head, sb, 100, NewLine(9));
g.DrawString(_config.Value.Address, Regular, sb, 50, NewLine(2));
g.DrawString("Cell Mobile:"+_config.Value.MobilePhone, Regular, sb, 100, NewLine(2));
g.DrawString("------------------------------------Invoice---------------------------------------------", Regular, sb, 0, NewLine(2));
g.DrawString("Invoice Number: ", Regular, sb, 0, NewLine(2));
g.DrawString(orders.FirstOrDefault().InvoiceNumber, Regular, sb, 70, CurrentLine());
g.DrawString("Date:", Regular, sb, 160, CurrentLine());
g.DrawString(DateTime.Now.ToString("dd-MMM-yyy"), Regular, sb, 185, CurrentLine());
g.DrawString("-------------------------------------------------------------------------------------------", Regular, sb, 0, NewLine(2));
g.DrawString("Sl.", Regular, sb, 0, NewLine(2));
g.DrawString("Item Description", Regular, sb, 30, CurrentLine());
g.DrawString("Unit Price", Regular, sb, 150, CurrentLine());
g.DrawString("Qty", Regular, sb, 200, CurrentLine());
g.DrawString("Total", Regular, sb, 240, CurrentLine());
g.DrawString("-------------------------------------------------------------------------------------------", Regular, sb, 0, NewLine(2));
int itemNo = 1;
double sum = 0.0;
double vat = 0.0;
foreach (var item in orderDetails)
{
// get the line Needed for the ProductID string
List LineList = new List();
if (item.ToString().Length > 22)
{
string temp = item.MenuName;
while (temp.ToString().Length > 22)
{
string CutTemp = temp.Substring(0, 22);
if (CutTemp[22 - 1].ToString() != " ")
{
// find the space back in the line
for (int i = 22 - 1; i > 0; i--)
{
if (CutTemp[i].ToString() == " ")
{
CutTemp = temp.Substring(1, i);
LineList.Add(CutTemp);
temp = temp.Substring(i);
break;
}
}
}
else
{
temp = temp.Substring(22 - 1);
LineList.Add(CutTemp);
}
}
if (temp.ToString().Length > 0)
{
LineList.Add(temp.ToString());
}
}
else
{
LineList.Add(item.MenuName);
}
g.DrawString(itemNo.ToString() + " ", Regular, sb, 0, NewLine(2));
for (int i = 0; i < LineList.Count; i++)
{
if (i == 0)
{
g.DrawString(LineList[i], Regular, sb, 10, CurrentLine());
}
else
{
g.DrawString(LineList[i], Regular, sb, 10, NewLine(2));
}
}
g.DrawString(item.Price.ToString(), Regular, sb, 155, CurrentLine());
g.DrawString(item.Qty.ToString(), Regular, sb, 210, CurrentLine());
g.DrawString((Convert.ToDouble( item.Price) * Convert.ToDouble(item.Qty)).ToString()+ "Tk", Regular, sb, 235, CurrentLine());
itemNo++;
sum += (Convert.ToDouble(item.Qty) * Convert.ToDouble( item.Price));
}
vat = Math.Floor((sum - discount) * _config.Value.VAT / 100);
g.DrawString("-------------------------------------------------------------------------------------------", Regular, sb, 0, NewLine(2));
g.DrawString("Sub Total: ", Regular, sb, 150, NewLine(2));
g.DrawString(sum.ToString()+" Tk", Regular, sb, 235, CurrentLine());
g.DrawString("(-) Discount: ", Regular, sb, 150, NewLine(2));
g.DrawString(discount.ToString()+" Tk", Regular, sb, 235, CurrentLine());
g.DrawString("------------------------------------------", Regular, sb, 150, NewLine(2));
// g.DrawString( (sum - Convert.ToDouble(orderDetails.FirstOrDefault().Less)).ToString() ,Regular, sb, 235, NewLine(2));
g.DrawString("(+) VAT (+"+_config.Value.VAT+"%): ", Regular, sb, 150, NewLine(2));
g.DrawString((vat).ToString() + " Tk", Regular, sb, 235, CurrentLine());
g.DrawString("------------------------------------------", Regular, sb, 150, NewLine(2));
g.DrawString("Net Payable: ", Regular, sb, 150, NewLine(2));
g.DrawString(( sum - discount).ToString() + " Tk", Regular, sb, 235, CurrentLine());
g.DrawString("-------------------------------------------------------------------------------------------", Regular, sb, 0, NewLine(2));
g.DrawString("** Your Total Saving Today **", Regular, sb, 0, NewLine(2));
g.DrawString(discount.ToString() + " Tk", Regular, sb, 235, CurrentLine());
g.DrawString("** VAT againts this cahallan is payable through central registration **", Regular, sb, 0, NewLine(4));
g.DrawString("Thank you for your visit.", Regular, sb, 100, NewLine(2));
g.DrawString("Purchase of defected item must be exchanged by 24 hours with invoice.", Regular, sb, 0, NewLine(2));
g.DrawString("For any quries or complain, please call"+_config.Value.CellPhone+" (11.00 AM - 11.00PM)", Regular, sb, 0, NewLine(2));
g.DrawString("Developed by Tawoon.org", Regular, sb, 95, NewLine(5));
g.DrawString("", Regular, sb, 95, NewLine(4));
}
private int CurrentLine()
{
return CountLineNumber * lineHeight;
}
private int NewLine(int newLineNumber)
{
CountLineNumber = CountLineNumber + newLineNumber;
return CountLineNumber * lineHeight;
}
[HttpPost]
public bool PayBill([FromBody] PaymentDataView_Model paymentData)
{
// Update the Table Status
tableIdGlobal = paymentData.TableId;
receivedAmount = paymentData.ReceivedAmount;
paymentMethodId = paymentData.PayemntMethodId;
returnAmount = paymentData.RetrunAmount;
dueAmount = paymentData.DueAmount;
var table = _context.Diningtables.SingleOrDefault(x => x.Id == paymentData.TableId);
table.Status = "Free";
_context.Update(table);
_context.SaveChanges();
var orders = _context.Orders.Where(x => x.DiningtableId == paymentData.TableId && x.IsPrinted == false).ToList();
// Update Order Print Status
for (int i=0; i x.Id == paymentData.TableId);
table.Status = "Free";
_context.Update(table);
_context.SaveChanges();
var orders = _context.Orders.Where(x => x.DiningtableId == paymentData.TableId && x.IsPrinted == false).ToList();
// send the print command to USP POS printer
PrintDocument prtdoc = new PrintDocument();
string strDefaultPrinter = prtdoc.PrinterSettings.PrinterName;
prtdoc.OriginAtMargins = true;
prtdoc.DefaultPageSettings.Landscape = true;
PrintDocument pd = new PrintDocument();
//PaperSize ps = new PaperSize("", 285, 520); //paper size
//pd.PrintPage += new PrintPageEventHandler(printPOSPagePayBill);
//pd.PrintController = new StandardPrintController();
//pd.DefaultPageSettings.Margins.Left = 0;
//pd.DefaultPageSettings.Margins.Right = 0;
//pd.DefaultPageSettings.Margins.Top = 0;
//pd.DefaultPageSettings.Margins.Bottom = 10;
//// pd.DefaultPageSettings.PaperSize = ps;
//pd.Print();
// Update Order Print Status
for (int i = 0; i < orders.Count; i++)
{
if (i == 0)
{
orders[i].IsPrinted = true;
orders[i].PaymentmodeId = paymentData.PayemntMethodId;
orders[i].PaidAmount = paymentData.ReceivedAmount - paymentData.RetrunAmount;
orders[i].DueAmount = paymentData.DueAmount;
_context.Update(orders[i]);
_context.SaveChanges();
}
else
{
orders[i].IsPrinted = true;
orders[i].PaymentmodeId = paymentData.PayemntMethodId;
_context.Update(orders[i]);
_context.SaveChanges();
}
}
double discount = orders.FirstOrDefault().DiscountAmount;
List orderDetailsMulti = new List();
foreach (var item in orders)
{
var OrderDetailsDb = _context.Orderdetails.Where(x => x.OrderId == item.Id).ToList();
var orderDetailsToPrint = OrderDetailsDb.Join(_context.Menus, od => od.MenuId, m => m.Id, (od, m) => new OrderDetailsForPrint
{
Id = m.Id,
MenuName = m.Name,
Qty = od.Quantity,
CookingDeptId = m.CookingDepartmentId,
Price = m.Price.ToString()
}).ToList();
orderDetailsMulti.AddRange(orderDetailsToPrint);
}
List orderDetails = new List();
int qty = 0;
foreach (var item in orderDetailsMulti)
{
var MenuFound = orderDetails.Find(x => x.MenuName == item.MenuName);
if (MenuFound != null)
{
orderDetails.Find(x => x.MenuName == item.MenuName).Qty = (Convert.ToInt32(orderDetails.Find(x => x.MenuName == item.MenuName).Qty) + Convert.ToInt32(item.Qty)).ToString();
}
else
{
orderDetails.Add(item);
}
}
string baseUri = $"{Request.Scheme}://{Request.Host}";
string imageUrl = string.Empty;
imageUrl = baseUri + "/" + _config.Value.LogoPath;
double Payable = orderDetails.Sum(x => Convert.ToDouble(x.Price)) - discount;
double due = 0;
double returnAmount = 0;
due = Payable - returnAmount;
if (due < 0)
{
due = due * (-1);
returnAmount = due;
}
else if (due > 0)
{
returnAmount = 0;
}
else
{
due = 0;
returnAmount = 0;
}
PrintInvoiceModel printInvoiceModel = new PrintInvoiceModel();
printInvoiceModel.CompanyName = _config.Value.CompanyName;
printInvoiceModel.Address = _config.Value.Address;
printInvoiceModel.LogoUrl = imageUrl;
printInvoiceModel.CellPhone = _config.Value.MobilePhone;
printInvoiceModel.Email = _config.Value.Email;
printInvoiceModel.Date = DateTime.Now.Date.ToString("dd-MM-yy");
printInvoiceModel.Time = DateTime.Now.ToString("hh:mm tt");
printInvoiceModel.orderDetailsForPrints = orderDetails;
printInvoiceModel.Discount = discount;
printInvoiceModel.VAT = _config.Value.VAT;
printInvoiceModel.ReceivedAmount = receivedAmount;
printInvoiceModel.SubTotal = orderDetails.Sum(x => Convert.ToDouble(x.Price));
printInvoiceModel.Payable = Payable;
printInvoiceModel.Retrun = returnAmount;
printInvoiceModel.Due = due;
printInvoiceModel.InvoiceNo = orders.FirstOrDefault().InvoiceNumber;
return printInvoiceModel;
}
public string ImageToBase64(Image image,System.Drawing.Imaging.ImageFormat format)
{
using (MemoryStream ms = new MemoryStream())
{
// Convert Image to byte[]
image.Save(ms, format);
byte[] imageBytes = ms.ToArray();
// Convert byte[] to Base64 String
string base64String = Convert.ToBase64String(imageBytes);
return base64String;
}
}
public async Task PrintPreview(PrintInvoiceModel printInvoiceModel )
{
return View();
}
private void printPOSPagePayBill(object sender, PrintPageEventArgs e)
{
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
Encoding.GetEncoding("windows-1252");
var orders = _context.Orders.Where(x => x.DiningtableId == tableIdGlobal && x.IsPrinted == false).ToList();
double discount = orders.FirstOrDefault().DiscountAmount;
List orderDetailsMulti = new List();
foreach (var item in orders)
{
var OrderDetailsDb = _context.Orderdetails.Where(x => x.OrderId == item.Id).ToList();
var orderDetailsToPrint = OrderDetailsDb.Join(_context.Menus, od => od.MenuId, m => m.Id, (od, m) => new OrderDetailsForPrint
{
Id = m.Id,
MenuName = m.Name,
Qty = od.Quantity,
CookingDeptId = m.CookingDepartmentId,
Price = m.Price.ToString()
}).ToList();
orderDetailsMulti.AddRange(orderDetailsToPrint);
}
List orderDetails = new List();
int qty = 0;
foreach (var item in orderDetailsMulti)
{
var MenuFound = orderDetails.Find(x => x.MenuName == item.MenuName);
if (MenuFound != null)
{
orderDetails.Find(x => x.MenuName == item.MenuName).Qty = (Convert.ToInt32(orderDetails.Find(x => x.MenuName == item.MenuName).Qty) + Convert.ToInt32(item.Qty)).ToString();
}
else
{
orderDetails.Add(item);
}
}
Graphics g = e.Graphics;
// Head Takes = 50 Char
// Regular Takes = 62 Char
// Product
Font Head = new Font("Arial Narrow", 10, FontStyle.Regular);
Font Regular = new Font("Arial Narrow", 8, FontStyle.Regular);
Font RegularBold = new Font("Arial Narrow", 8, FontStyle.Bold);
SolidBrush sb = new SolidBrush(Color.Black);
var stream = _env.WebRootFileProvider.GetFileInfo(_config.Value.LogoPath).CreateReadStream();
Image Logo = Image.FromStream(stream);
e.Graphics.DrawImage(Logo, 35, 0, 200, 80);
g.DrawString(_config.Value.CompanyName, Head, sb, 100, NewLine(9));
g.DrawString(_config.Value.Address, Regular, sb, 50, NewLine(2));
g.DrawString("Cell Mobile:"+_config.Value.MobilePhone, Regular, sb, 100, NewLine(2));
g.DrawString("------------------------------------Invoice---------------------------------------------", Regular, sb, 0, NewLine(2));
g.DrawString("Invoice Number: ", Regular, sb, 0, NewLine(2));
g.DrawString(orders.FirstOrDefault().InvoiceNumber, Regular, sb, 70, CurrentLine());
g.DrawString("Date:", Regular, sb, 160, CurrentLine());
g.DrawString(DateTime.Now.ToString("dd-MMM-yyy"), Regular, sb, 185, CurrentLine());
g.DrawString("-------------------------------------------------------------------------------------------", Regular, sb, 0, NewLine(2));
g.DrawString("Sl.", Regular, sb, 0, NewLine(2));
g.DrawString("Item Description", Regular, sb, 30, CurrentLine());
g.DrawString("Unit Price", Regular, sb, 150, CurrentLine());
g.DrawString("Qty", Regular, sb, 200, CurrentLine());
g.DrawString("Total", Regular, sb, 240, CurrentLine());
g.DrawString("-------------------------------------------------------------------------------------------", Regular, sb, 0, NewLine(2));
int itemNo = 1;
double sum = 0.0;
double vat = 0.0;
foreach (var item in orderDetails)
{
// get the line Needed for the ProductID string
List LineList = new List();
if (item.ToString().Length > 22)
{
string temp = item.MenuName;
while (temp.ToString().Length > 22)
{
string CutTemp = temp.Substring(0, 22);
if (CutTemp[22 - 1].ToString() != " ")
{
// find the space back in the line
for (int i = 22 - 1; i > 0; i--)
{
if (CutTemp[i].ToString() == " ")
{
CutTemp = temp.Substring(1, i);
LineList.Add(CutTemp);
temp = temp.Substring(i);
break;
}
}
}
else
{
temp = temp.Substring(22 - 1);
LineList.Add(CutTemp);
}
}
if (temp.ToString().Length > 0)
{
LineList.Add(temp.ToString());
}
}
else
{
LineList.Add(item.MenuName);
}
g.DrawString(itemNo.ToString() + " ", Regular, sb, 0, NewLine(2));
for (int i = 0; i < LineList.Count; i++)
{
if (i == 0)
{
g.DrawString(LineList[i], Regular, sb, 10, CurrentLine());
}
else
{
g.DrawString(LineList[i], Regular, sb, 10, NewLine(2));
}
}
g.DrawString(item.Price.ToString(), Regular, sb, 155, CurrentLine());
g.DrawString(item.Qty.ToString(), Regular, sb, 210, CurrentLine());
g.DrawString((Convert.ToDouble(item.Price) * Convert.ToDouble(item.Qty)).ToString()+ "Tk", Regular, sb, 235, CurrentLine());
itemNo++;
sum += (Convert.ToDouble(item.Qty) * Convert.ToDouble(item.Price));
}
vat = Math.Floor((sum - discount) * _config.Value.VAT/ 100);
g.DrawString("-------------------------------------------------------------------------------------------", Regular, sb, 0, NewLine(2));
g.DrawString("Sub Total: ", Regular, sb, 150, NewLine(2));
g.DrawString(sum.ToString()+" Tk", Regular, sb, 235, CurrentLine());
g.DrawString("(-) Discount: ", Regular, sb, 150, NewLine(2));
g.DrawString(discount.ToString()+" Tk", Regular, sb, 235, CurrentLine());
g.DrawString("------------------------------------------", Regular, sb, 150, NewLine(2));
g.DrawString("(+) VAT ("+_config.Value.VAT+"%): ", Regular, sb, 150, NewLine(2));
g.DrawString((vat).ToString() + " Tk", Regular, sb, 235, CurrentLine());
g.DrawString("------------------------------------------", Regular, sb, 150, NewLine(2));
g.DrawString("Net Payable: ", Regular, sb, 150, NewLine(2));
g.DrawString(((sum - discount)+vat).ToString() + " Tk", Regular, sb, 235, CurrentLine());
g.DrawString("-----------------------------------------------", Regular, sb, 150, NewLine(2));
g.DrawString("Received: ", Regular, sb, 150, NewLine(2));
g.DrawString( receivedAmount.ToString()+" Tk", Regular, sb, 235, CurrentLine());
g.DrawString("-----------------------------------------------", Regular, sb, 150, NewLine(2));
g.DrawString("Retrun: ", Regular, sb, 150, NewLine(2));
g.DrawString(returnAmount.ToString()+ "Tk", Regular, sb, 235, CurrentLine());
g.DrawString("-----------------------------------------------", Regular, sb, 150, NewLine(2));
g.DrawString("Due: ", Regular, sb, 150, NewLine(2));
g.DrawString(dueAmount.ToString()+ "Tk", Regular, sb, 235, CurrentLine());
g.DrawString("-------------------------------------------------------------------------------------------", Regular, sb, 0, NewLine(2));
g.DrawString("** Your Total Saving Today **", Regular, sb, 0, NewLine(2));
g.DrawString(discount.ToString() + " Tk", Regular, sb, 235, CurrentLine());
g.DrawString("** VAT againts this cahallan is payable through central registration **", Regular, sb, 0, NewLine(4));
g.DrawString("Thank you for your visit.", Regular, sb, 100, NewLine(2));
g.DrawString("Purchase of defected item must be exchanged by 24 hours with invoice.", Regular, sb, 0, NewLine(2));
g.DrawString("For any quries or complain, please call"+_config.Value.CellPhone+" (11.00 AM - 11.00PM)", Regular, sb, 0, NewLine(2));
g.DrawString("Developed by Tawoon.org", Regular, sb, 95, NewLine(5));
g.DrawString("", Regular, sb, 95, NewLine(4));
}
[HttpPost]
public object BillPreview([FromBody] int data)
{
BillPreviewModel billPreviewModel = new BillPreviewModel();
double tatalAmount = 0;
double discount = 0;
double netAmount = 0;
// Update Order Print Status
var orders = _context.Orders.Where(x => x.DiningtableId == data && x.IsPrinted == false).ToList();
// send the print command t0 IP printer
foreach (var item in orders)
{
tatalAmount = tatalAmount + item.TotalPrice;
discount = item.DiscountAmount;
}
double vat = ((tatalAmount - discount) * _config.Value.VAT / 100);
double netPayableRounded = Math.Floor((tatalAmount - discount) + vat);
billPreviewModel.TotalBill = tatalAmount.ToString();
billPreviewModel.Discount = discount.ToString();
billPreviewModel.VAT = vat.ToString();
billPreviewModel.NetBill = netPayableRounded.ToString();
return billPreviewModel;
}
public bool AddDiscount([FromBody] AddDiscountViewModel discount )
{
var orders = _context.Orders.Where(x => x.DiningtableId == discount.TableId && x.IsPrinted == false).ToList();
foreach (var item in orders)
{
item.DiscountAmount = discount.DiscountAmount;
_context.Update(item);
_context.SaveChanges();
}
return true;
}
[HttpPost]
public async Task SaveOrderVoid([FromBody] OrderViewModel model )
{
int DiningTableId = Convert.ToInt32(model.DiningTableId);
List itemTotalPriceList = new List();
List MenuListFromOrder = new List();
List VoidMenuListFromVoid = new List();
List itemtoRemove = new List();
var orders = _context.Orders.Where(x => x.DiningtableId == DiningTableId && x.IsPrinted == false).ToList();
foreach (var item in model.OrderDetails)
{
VoidMenuListFromVoid.Add(item.MenuId);
}
foreach (var order in orders)
{
var details = _context.Orderdetails.Where(x => x.OrderId == order.Id).ToList();
foreach (var d in details)
{
MenuListFromOrder.Add(d.MenuId);
}
}
var ss = MenuListFromOrder.Distinct().ToList();
for(int i =0; i x.OrderId == order.Id).ToList();
for (int i = 0; i < itemtoRemove.Count; i++)
{
for (int j= 0; j < details.Count; j++)
{
if (details[j].MenuId == itemtoRemove[i])
{
details[j].Quantity = "0";
_context.Update(details[j]);
_context.SaveChanges();
}
}
}
}
// re-assign the item qty in order details table
//foreach (var item in model.OrderDetails)
//{
// //2
// for (int i = 0; i x.OrderId == orders[i].Id).ToList().Count;
// //2
// for (int k = 0; k < orderDetailsCount; k++)
// {
// if (i == 0)
// {
// var orderDetails = _context.Orderdetails.SingleOrDefault(x => x.OrderId == orders[i].Id && x.MenuId == item.MenuId);
// orderDetails.Quantity = item.Quantity;
// _context.Update(orderDetails);
// _context.SaveChanges();
// }
// else
// {
// var orderDetails = _context.Orderdetails.SingleOrDefault(x => x.OrderId == orders[i].Id && x.MenuId == item.MenuId);
// orderDetails.Quantity = "0";
// _context.Update(orderDetails);
// _context.SaveChanges();
// }
// }
// }
// }
// re-calculate the order by orderId
double sum = 0;
foreach (var order in orders)
{
var details = _context.Orderdetails.Where(x => x.OrderId == order.Id).ToList();
foreach (var d in details)
{
var price = _context.Menus.SingleOrDefault(x => x.Id == d.MenuId).Price;
sum += Convert.ToDouble(d.Quantity) * Convert.ToDouble(price);
}
}
for (int i = 0; i < orders.Count; i++)
{
if (i == 0)
{
orders[i].TotalPrice = sum;
_context.Update(orders[i]);
_context.SaveChanges();
}
else
{
orders[i].TotalPrice = 0;
_context.Update(orders[i]);
_context.SaveChanges();
}
}
return true;
}
[HttpPost]
public async Task SaveOrder([FromBody] OrderViewModel order)
{
double totalPrice = Convert.ToDouble(order.TotalPrice);
int DiningTableId = Convert.ToInt32(order.DiningTableId);
int employeeID = Convert.ToInt32(order.EmployeeId);
string lastInvoiceNumber = _context.Orders.OrderByDescending(x => x.Id).Select(x=>x.InvoiceNumber).FirstOrDefault();
var ss = _context.Orders.OrderBy(x => x.Id).FirstOrDefault();
Order orderModel = new Order {
CreatedAt = DateTime.Now,
IsPrinted = false,
Note = order.Note,
EmployeeId = employeeID,
DiningtableId = DiningTableId,
CreatedBy = User.FindFirstValue(ClaimTypes.NameIdentifier),
TotalPrice = totalPrice,
InvoiceNumber = _utilityFunctions.GetUnicInvoiceNumber(lastInvoiceNumber),
Date = DateTime.Now.ToString("MM/dd/yyyy"),
};
_context.Add(orderModel);
await _context.SaveChangesAsync();
List orderDetailsList = new List();
foreach (var item in order.OrderDetails)
{
Orderdetail orderDetails = new Orderdetail
{
OrderId = orderModel.Id,
MenuId = item.MenuId,
Quantity = item.Quantity,
ExtraIngredients = item.ExtraIngredients,
CreatedAt = DateTime.Now
};
orderDetailsList.Add(orderDetails);
}
_context.AddRange(orderDetailsList);
await _context.SaveChangesAsync();
var diningtable = await _context.Diningtables.FindAsync(DiningTableId);
var diningTableName = diningtable.Name;
diningtable.Status = TableStatus.Busy.ToString();
_context.Update(diningtable);
_context.SaveChanges();
// send the Print Command to the Printer
var arabic_Chinees = orderDetailsList.Join(_context.Menus, od => od.MenuId, m => m.Id, (od, m) => new OrderDetailsForPrint
{
Id = m.Id,
MenuName = m.Name,
Qty = od.Quantity,
CookingDeptId = m.CookingDepartmentId
}).Where(x => x.CookingDeptId == 1).ToList();
var drinks_kabab = orderDetailsList.Join(_context.Menus, od => od.MenuId, m => m.Id, (od, m) => new OrderDetailsForPrint
{
Id = m.Id,
MenuName = m.Name,
Qty = od.Quantity,
CookingDeptId = m.CookingDepartmentId
}).Where(x => x.CookingDeptId == 2).ToList();
//string ipAddress_drinks_kabab = _config.Value.KitchenLanPrinter_IP;
//byte[] data = GetPrintData(drinks_kabab, diningTableName, orderModel.Id, "Drinks & Kabab");
//TcpPrint(ipAddress_drinks_kabab, data);
//string ipAddress_arabic_chinees = _config.Value.KitchenLanPrinter_IP;
//byte[] data_arabic = GetPrintData(arabic_Chinees, diningTableName, orderModel.Id, "Arabic & Chinees");
//TcpPrint(ipAddress_arabic_chinees, data_arabic);
return true;
}
[HttpPost]
public bool SaveTransection([FromBody] TransectionModel transectionData)
{
double cashoutAmount = transectionData.Amount=="" ? 0:Convert.ToDouble(transectionData.Amount);
int CashOutSubTypesId = transectionData.CashOutSubTypesId =="" ? 0 : Convert.ToInt32(transectionData.CashOutSubTypesId);
int CashoutTypeId = transectionData.CashoutTypeId =="" ? 0: Convert.ToInt32(transectionData.CashoutTypeId);
int EmployeeId = transectionData.EmployeesId =="" ? 0 : Convert.ToInt32(transectionData.EmployeesId);
int SupplierId = transectionData.SuppliersId == ""? 0 : Convert.ToInt32(transectionData.SuppliersId);
LedgerBook ledger = new LedgerBook {
CashOutAmount = cashoutAmount,
CashOutSubTypesId = CashOutSubTypesId,
CashoutTypeId = CashoutTypeId,
Collection = 0,
EmployeesId = EmployeeId,
EntryTime = DateTime.Now,
IsValid = true,
Less = 0,
Refund = 0,
Sales = 0,
SuppliersId = SupplierId,
TrDate = DateTime.Now,
TrNo = "",
UserId = User.FindFirstValue(ClaimTypes.NameIdentifier)
};
_context.Add(ledger);
var result = _context.SaveChanges();
return result>0? true: false;
}
}
}
Comments
Post a Comment