Print problemer
Har muligvis rettet den print fejl der er - men mangler at få det testet. Der er slettet en masse projekter som ikke bliver brugt mere. Og flyttet rundt på de få projekter som er tilbage. Dette er V2 og i sit eget repo, så dette er initial commit
This commit is contained in:
57
PointOfSale/Pos.Ui/Pos/Service/CacheService.cs
Normal file
57
PointOfSale/Pos.Ui/Pos/Service/CacheService.cs
Normal file
@@ -0,0 +1,57 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using Database.Models;
|
||||
using Database.Repository;
|
||||
|
||||
namespace Pos.Service
|
||||
{
|
||||
public static class CacheService
|
||||
{
|
||||
|
||||
private static bool _invalidEmployee = false;
|
||||
private static bool _invalidProductGroup = false;
|
||||
private static List<EmployeeEntity> _employees;
|
||||
private static List<ProductGroupEntity> _productGroups;
|
||||
|
||||
|
||||
public static void Invalidate()
|
||||
{
|
||||
_invalidEmployee = true;
|
||||
_invalidProductGroup = true;
|
||||
}
|
||||
|
||||
public static ObservableCollection<EmployeeEntity> GetEmployee()
|
||||
{
|
||||
ObservableCollection<EmployeeEntity> obsEmployees = new ObservableCollection<EmployeeEntity>();
|
||||
if (_invalidEmployee)
|
||||
{
|
||||
EmployeeRepository employeeRepository = new EmployeeRepository();
|
||||
_employees = employeeRepository.GetAll();
|
||||
foreach (EmployeeEntity employee in _employees)
|
||||
{
|
||||
obsEmployees.Add(employee);
|
||||
}
|
||||
_invalidEmployee = false;
|
||||
}
|
||||
|
||||
return obsEmployees;
|
||||
}
|
||||
|
||||
public static ObservableCollection<ProductGroupEntity> GetProductGroupsIncludeProducts()
|
||||
{
|
||||
ObservableCollection<ProductGroupEntity> obsProductGroups = new ObservableCollection<ProductGroupEntity>();
|
||||
if(_invalidProductGroup)
|
||||
{
|
||||
ProductGroupRepository productGroupRepository = new ProductGroupRepository();
|
||||
_productGroups = productGroupRepository.GetAll();
|
||||
_invalidProductGroup = false;
|
||||
foreach (ProductGroupEntity productGroup in _productGroups)
|
||||
{
|
||||
obsProductGroups.Add(productGroup);
|
||||
}
|
||||
}
|
||||
|
||||
return obsProductGroups;
|
||||
}
|
||||
}
|
||||
}
|
||||
301
PointOfSale/Pos.Ui/Pos/Service/SaleService.cs
Normal file
301
PointOfSale/Pos.Ui/Pos/Service/SaleService.cs
Normal file
@@ -0,0 +1,301 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Configuration;
|
||||
using System.Linq;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Security.Cryptography.X509Certificates;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Database.Models;
|
||||
using Database.Repository;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Pos.Json;
|
||||
using Pos.Models;
|
||||
using RestSharp;
|
||||
using BodyModel = Pos.Json.BodyModel;
|
||||
using FooterModel = Pos.Json.FooterModel;
|
||||
using HeaderModel = Pos.Json.HeaderModel;
|
||||
|
||||
namespace Pos.Service
|
||||
{
|
||||
public class SaleService
|
||||
{
|
||||
private float _totalPrice = 0;
|
||||
private SaleRepository _saleRepository = new SaleRepository();
|
||||
|
||||
public void Save(List<SaleGridModel> saleGridModels, List<AmountGridModel> amountGridModels, int employeeNo)
|
||||
{
|
||||
SaleRepository saleRepository = new SaleRepository();
|
||||
SaleEntity saleEntity = saleRepository.New(employeeNo);
|
||||
|
||||
foreach (SaleGridModel model in saleGridModels)
|
||||
{
|
||||
if(String.IsNullOrEmpty(model.Navn))
|
||||
continue;
|
||||
|
||||
SaleLineEntity saleLineEntity = new SaleLineEntity();
|
||||
saleLineEntity.SaleId = saleEntity.Id;
|
||||
saleLineEntity.Price = model.SaleGridInternalModel.InternPrice;
|
||||
saleLineEntity.Product = model.Navn;
|
||||
saleLineEntity.Pieces = model.SaleGridInternalModel.InternPieces;
|
||||
saleLineEntity.Total = saleLineEntity.Pieces * saleLineEntity.Price;
|
||||
saleRepository.SaveSaleLine(saleLineEntity);
|
||||
}
|
||||
|
||||
foreach (AmountGridModel model in amountGridModels)
|
||||
{
|
||||
PaymentEntity payment = new PaymentEntity();
|
||||
payment.Amount = model.Amount;
|
||||
payment.Type = model.PaymentMethodText;
|
||||
payment.SaleId = saleEntity.Id;
|
||||
saleRepository.SavePayment(payment);
|
||||
}
|
||||
}
|
||||
|
||||
public void PrintReceipt()
|
||||
{
|
||||
|
||||
SaleEntity sale = _saleRepository.GetLatest();
|
||||
if (sale == null)
|
||||
return;
|
||||
|
||||
BuildSaleReceipt(sale);
|
||||
}
|
||||
|
||||
public void PrintReceipt(int saleId)
|
||||
{
|
||||
SaleEntity sale = _saleRepository.Get(saleId);
|
||||
BuildSaleReceipt(sale);
|
||||
}
|
||||
|
||||
public void PrintSaleOfDay(DateTime selectedDate, TotalSaleDetail totalSaleDetail)
|
||||
{
|
||||
SaleOfDayModel saleOfDayModel = new SaleOfDayModel();
|
||||
saleOfDayModel.Date = selectedDate;
|
||||
saleOfDayModel.TotalSale = totalSaleDetail.TotalSale;
|
||||
saleOfDayModel.TotalCustomers = totalSaleDetail.TotalCustomer;
|
||||
foreach (TotalSaleCategory category in totalSaleDetail.TotalSaleCategories)
|
||||
{
|
||||
SaleOfDayDetail saleOfDayDetail = new SaleOfDayDetail();
|
||||
saleOfDayDetail.TotalSale = category.Sale;
|
||||
saleOfDayDetail.Category = category.Category;
|
||||
saleOfDayModel.SaleOfDayDetail.Add(saleOfDayDetail);
|
||||
}
|
||||
|
||||
LoadConfig loadConfig = new LoadConfig();
|
||||
IConfiguration config = loadConfig.ByEnvironment();
|
||||
string url = config["API:URL"];
|
||||
|
||||
RestClient restClient = new RestClient($"{url}/api/PosPrinter/SaleOfDay");
|
||||
RestRequest request = new RestRequest();
|
||||
request.AddJsonBody(saleOfDayModel);
|
||||
request.Method = Method.Post;
|
||||
EnsurePrintSucceeded(restClient.Post(request));
|
||||
}
|
||||
|
||||
public TotalSaleDetail TotalSale(DateTime selectedDate)
|
||||
{
|
||||
List<SaleEntity> sales = _saleRepository.GetByDateRange(selectedDate);
|
||||
TotalSaleDetail totalSaleDetail = new TotalSaleDetail();
|
||||
totalSaleDetail.TotalCustomer = sales.Count;
|
||||
foreach (SaleEntity sale in sales)
|
||||
{
|
||||
List<SaleLineEntity> saleLineBySaleId = _saleRepository.GetSaleLineBySaleId(sale.Id);
|
||||
foreach (SaleLineEntity saleLine in saleLineBySaleId)
|
||||
{
|
||||
|
||||
if (totalSaleDetail.TotalSaleCategories.Any(c => c.Category.Contains(saleLine.Product)))
|
||||
{
|
||||
TotalSaleCategory totalSaleCategory = totalSaleDetail.TotalSaleCategories.Single(c => c.Category.Contains(saleLine.Product));
|
||||
totalSaleCategory.Sale += saleLine.Total;
|
||||
totalSaleCategory.SaleString = "Kr. " + totalSaleCategory.Sale.ToString("0.00");
|
||||
}
|
||||
else
|
||||
{
|
||||
TotalSaleCategory totalSaleCategory = new TotalSaleCategory();
|
||||
totalSaleCategory.Sale = saleLine.Total;
|
||||
totalSaleCategory.SaleString ="Kr. " + totalSaleCategory.Sale.ToString("0.00");
|
||||
totalSaleCategory.Category = saleLine.Product;
|
||||
totalSaleDetail.TotalSaleCategories.Add(totalSaleCategory);
|
||||
}
|
||||
|
||||
totalSaleDetail.TotalSale += saleLine.Total;
|
||||
}
|
||||
}
|
||||
|
||||
return totalSaleDetail;
|
||||
}
|
||||
|
||||
public string LastAndTotalSale()
|
||||
{
|
||||
SaleEntity saleEntity = _saleRepository.GetLatest();
|
||||
List<SaleLineEntity> saleLineBySaleId = _saleRepository.GetSaleLineBySaleId(saleEntity.Id);
|
||||
decimal lastSale = 0;
|
||||
foreach (SaleLineEntity saleLine in saleLineBySaleId)
|
||||
{
|
||||
lastSale += saleLine.Total;
|
||||
}
|
||||
TotalSaleDetail totalSale = TotalSale(DateTime.Now);
|
||||
string todaySale = $"Sidste salg: kr. {lastSale.ToString("N")} - Dagens salg: kr. {totalSale.TotalSale.ToString("N")}";
|
||||
return todaySale;
|
||||
}
|
||||
|
||||
private void BuildSaleReceipt(SaleEntity sale)
|
||||
{
|
||||
EmployeeRepository employeeRepository = new EmployeeRepository();
|
||||
EmployeeEntity employee = employeeRepository.Get(sale.EmployeeId);
|
||||
|
||||
|
||||
List<SaleLineEntity> salesLines = _saleRepository.GetSaleLineBySaleId(sale.Id);
|
||||
List<PaymentEntity> payments = _saleRepository.GetPaymentBySaleId(sale.Id);
|
||||
|
||||
PosReceipt posReceipt = new PosReceipt();
|
||||
posReceipt.header = BuildReceiptHeader().ToArray();
|
||||
ProductModel[] productModels = BuildSaleLines(salesLines).ToArray();
|
||||
posReceipt.bodyModel = BuildBody(sale, employee.Name);
|
||||
posReceipt.bodyModel.products = productModels;
|
||||
posReceipt.footer = BuildFooter().ToArray();
|
||||
posReceipt.logoBase64 = String.Empty;
|
||||
|
||||
LoadConfig loadConfig = new LoadConfig();
|
||||
IConfiguration config = loadConfig.ByEnvironment();
|
||||
string apiUrl = config["API:URL"];
|
||||
string url = $"{apiUrl}/api/PosPrinter/Receipt";
|
||||
|
||||
RestClient restClient = new RestClient(url);
|
||||
RestRequest request = new RestRequest();
|
||||
request.AddJsonBody(posReceipt);
|
||||
request.Method = Method.Post;
|
||||
EnsurePrintSucceeded(restClient.Post(request));
|
||||
}
|
||||
|
||||
private static void EnsurePrintSucceeded(RestResponse response)
|
||||
{
|
||||
if (response.IsSuccessful)
|
||||
return;
|
||||
|
||||
string message = response.ErrorMessage ?? response.Content ?? "Ukendt fejl";
|
||||
throw new InvalidOperationException(
|
||||
$"Printer-API kald fejlede ({(int)response.StatusCode} {response.StatusCode}): {message}",
|
||||
response.ErrorException);
|
||||
}
|
||||
private List<FooterModel> BuildFooter()
|
||||
{
|
||||
List<FooterModel> footerModels = new List<FooterModel>();
|
||||
FooterModel model = new FooterModel();
|
||||
model.value = "Tak for handlen";
|
||||
model.printStyles = new PrintStylesModel
|
||||
{
|
||||
bold = false,
|
||||
fontB = false,
|
||||
doubleHeight = false,
|
||||
doubleWidth = false,
|
||||
underline = false
|
||||
};
|
||||
model.feedingLines = 0;
|
||||
model.textAlignment = 0;
|
||||
footerModels.Add(model);
|
||||
return footerModels;
|
||||
}
|
||||
|
||||
private List<ProductModel> BuildSaleLines(List<SaleLineEntity> salesLines)
|
||||
{
|
||||
List<ProductModel> products = new List<ProductModel>();
|
||||
foreach (SaleLineEntity salesLine in salesLines)
|
||||
{
|
||||
ProductModel productModel = new ProductModel();
|
||||
productModel.noOfProduct = salesLine.Pieces.ToString();
|
||||
productModel.price = (float)salesLine.Price;
|
||||
productModel.totalPrice = salesLine.Pieces * productModel.price;
|
||||
_totalPrice += productModel.totalPrice;
|
||||
productModel.product = salesLine.Product;
|
||||
products.Add(productModel);
|
||||
}
|
||||
|
||||
return products;
|
||||
}
|
||||
|
||||
private BodyModel BuildBody(SaleEntity sale, string employeeName)
|
||||
{
|
||||
BodyModel body = new BodyModel
|
||||
{
|
||||
receiptNumber = sale.Id,
|
||||
receiptTime = sale.Time.ToString("HH:mm dd-MM-yyyy"),
|
||||
staff = employeeName,
|
||||
totalPrice = _totalPrice,
|
||||
totalVat = (_totalPrice / 100) * 25
|
||||
};
|
||||
|
||||
return body;
|
||||
}
|
||||
|
||||
private List<HeaderModel> BuildReceiptHeader()
|
||||
{
|
||||
List<HeaderModel> headerModels = new List<HeaderModel>();
|
||||
|
||||
HeaderModel headerModel = new HeaderModel
|
||||
{
|
||||
feedingLines = 1,
|
||||
textAlignment = 1,
|
||||
value = "Blomster Til Alt"
|
||||
};
|
||||
PrintStylesModel printStylesModel = new PrintStylesModel
|
||||
{
|
||||
bold = true,
|
||||
fontB = false,
|
||||
doubleHeight = true,
|
||||
doubleWidth = true,
|
||||
underline = false
|
||||
};
|
||||
headerModel.printStyles = printStylesModel;
|
||||
headerModels.Add(headerModel);
|
||||
|
||||
printStylesModel = new PrintStylesModel
|
||||
{
|
||||
bold = false,
|
||||
fontB = false,
|
||||
doubleHeight = false,
|
||||
doubleWidth = false,
|
||||
underline = false
|
||||
};
|
||||
|
||||
headerModel = new HeaderModel
|
||||
{
|
||||
feedingLines = 0,
|
||||
textAlignment = 1,
|
||||
value = "Adelgade 91",
|
||||
printStyles = printStylesModel
|
||||
};
|
||||
headerModels.Add(headerModel);
|
||||
|
||||
headerModel = new HeaderModel
|
||||
{
|
||||
feedingLines = 0,
|
||||
textAlignment = 1,
|
||||
value = "5400 Bogense",
|
||||
printStyles = printStylesModel
|
||||
};
|
||||
headerModels.Add(headerModel);
|
||||
|
||||
headerModel = new HeaderModel
|
||||
{
|
||||
feedingLines = 0,
|
||||
textAlignment = 1,
|
||||
value = "Tlf: 41 82 71 66",
|
||||
printStyles = printStylesModel
|
||||
};
|
||||
headerModels.Add(headerModel);
|
||||
|
||||
headerModel = new HeaderModel
|
||||
{
|
||||
feedingLines = 0,
|
||||
textAlignment = 1,
|
||||
value = "CVR: 37 14 44 36",
|
||||
printStyles = printStylesModel
|
||||
};
|
||||
headerModels.Add(headerModel);
|
||||
|
||||
return headerModels;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user