/// <summary> /// Displays registers that has state change.The algorithm is /// 1. It groups sales data based on store, department and register /// 2. Orders the grouped data by time in ascending order /// 3. Detect state change and log if it is detected.The algorithm to detect state change /// a. The first SalesEntity is the beginning of the transaction and register state is accepting /// b. If the register is in active for a defined seconds, gap between the previous and current transaction is calculated, /// if the register is inactive for the defined seconds, the previous transaction register state is "not accepting transaction" /// and the current transaction state is "accepting transaction" /// </summary> /// <param name="salesEntities"></param> public void LogRegisterStateChange(IEnumerable <SalesEntity> salesEntities) { string accepting = "accepting transaction"; string notAccepting = "not accepting transaction"; //Increased the interval to decrease log size long rangeInSecondsForStateChange = 60000000; var groupedSalesEntities = salesEntities.OrderBy(saleEntity => saleEntity.OrderTime) .GroupBy(saleEntity => new { saleEntity.StoreNumber, saleEntity.Department, saleEntity.Register }); foreach (var groupedSaleEntity in groupedSalesEntities) { SalesEntity previouSalesEntity = null; foreach (var salesEntity in groupedSaleEntity.ToList()) { if (previouSalesEntity == null) { Console.WriteLine( $"{salesEntity.StoreNumber} {salesEntity.Department} {salesEntity.Register} {salesEntity.OrderTime} {accepting}"); } else { if (salesEntity.OrderTime - rangeInSecondsForStateChange > previouSalesEntity.OrderTime) { Console.WriteLine( $"{previouSalesEntity.StoreNumber} {previouSalesEntity.Department} {previouSalesEntity.Register} {previouSalesEntity.OrderTime} {notAccepting}"); Console.WriteLine( $"{salesEntity.StoreNumber} {salesEntity.Department} {salesEntity.Register} {salesEntity.OrderTime} {accepting}"); } } previouSalesEntity = salesEntity; } } }
public IHttpActionResult ParseExcel(SalesEntity model) { this.ServiceId = model.ServiceId; this.IsFinanceFile = true; DataResponse response = new DataResponse(); if (!HasRight(new string[] { "SLSIMPRT" })) { return(Ok <DataResponse>(response)); } bool displayPatient = HasRight(new string[] { "VWSLSPTNT" }); if (model != null) { StringBuilder logString = new StringBuilder(); string logPath = HttpContext.Current.Server.MapPath(Path.Combine("~/Assets", CurrentBusinessId.Value.ToString(), "Sales", "Sales-Archives", "Uploads", "Logs")); if (!Directory.Exists(logPath)) { Directory.CreateDirectory(logPath); } string logFilePath = Path.Combine(logPath, string.Format("{0}.txt", DateTime.Now.ToString("MMddyyhhmmssttfff"))); if (!File.Exists(logFilePath)) { FileStream fs = File.Create(logFilePath); fs.Dispose(); } logString.AppendLine("Parsing starts @ " + DateTime.Now); logString.AppendLine("BusinessId \t:\t" + CurrentBusinessId.Value); if (model.SalesList != null && model.SalesList.Count > 0) { using (System.IO.StreamWriter logWriter = new System.IO.StreamWriter(logFilePath)) { if (!File.Exists(this.MapperFilePath)) { this.IsFinanceFile = false; } response = new RepositorySales().Insert(model.SalesList, CurrentBusinessId, CurrentUserId, model.ServiceId, this.MapperFilePath, 0, displayPatient, logWriter); } } } return(Ok <DataResponse>(response)); }
public void UpdateSales(SalesEntity salesEntity) { SalesRepository.Modify(salesEntity); }
public async Task <string> Handle(CreateSalesCommand request, CancellationToken cancellationToken) { string invoiceNumber = string.Empty; var result = new object(); bool existingCustomer = true; var invoiceId = 1; try { CustomerEntity customer = _context.Customers.Where(c => c.PhoneNumber == request.PhoneNumber).SingleOrDefault(); var lastSales = _context.Sales.OrderByDescending(x => x.SalesId).FirstOrDefault(); if (lastSales != null) { invoiceId = lastSales.SalesId + 1; } if (customer == null) { customer = new CustomerEntity() { Name = request.Name, PhoneNumber = request.PhoneNumber, Email = request.Email }; existingCustomer = false; } invoiceNumber = "ORD-" + customer.PhoneNumber + "-" + invoiceId.ToString(); await _context.BeginTransactionAsync(); if (!existingCustomer) { _context.Customers.Add(customer); await _context.SaveChangesAsync(cancellationToken); } else { if (!string.IsNullOrEmpty(request.Name)) { customer.Name = request.Name; } if (!string.IsNullOrEmpty(request.Email)) { customer.Email = request.Email; } _context.Customers.Update(customer); await _context.SaveChangesAsync(cancellationToken); } var sales = new SalesEntity() { OrderGroup = request.OrderGroup, CustomerId = customer.CustomerId, InvoiceNumber = invoiceNumber, Total = request.Total, PickUpDate = request.PickUpDate }; _context.Sales.Add(sales); await _context.SaveChangesAsync(cancellationToken); await _context.CommitTransactionAsync(); IEnumerable <OrderEntity> orderEntities = _context.Orders.Where(x => x.OrderGroup == request.OrderGroup).ToList(); var totalOrders = orderEntities.Count(); result = new DocketVm() { CustomerName = customer.Name, PhoneNumber = customer.PhoneNumber, DocketNumber = invoiceNumber, PickUpDetails = request.PickUpDate.ToString("dddd, dd MMMM yyyy"), Qty = totalOrders }; } catch (Exception ex) { var exception = ex.Message.ToString(); _context.RollbackTransaction(); throw; } return(JsonConvert.SerializeObject(result)); }