Exemple #1
0
        /// <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;
                }
            }
        }
Exemple #2
0
        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));
        }