private void sequenceNumber(WebAPIModel.Transaction transactionApi)
        {
            SequenceNumberLog log = new SequenceNumberLog();

            log.StoreCode          = transactionApi.storeCode;
            log.LastNumberSequence = transactionApi.SequenceNumber;
            log.LastTransId        = transactionApi.transactionId;
            log.Date            = DateTime.Now;
            log.TransactionType = "Transaction";
            _context.SequenceNumberLog.Add(log);
            _context.SaveChanges();
        }
        private async Task inventory(WebAPIModel.Transaction transactionApi)
        {
            //transactionApi.storeCode = "AAB";
            for (int i = 0; i < transactionApi.transactionLines.Count; i++)
            {
                InventoryLines inventoryLines = _context.InventoryLines.Where(c => c.WarehouseId == transactionApi.storeCode && c.ItemId == transactionApi.transactionLines[i].article.id).First();
                if (inventoryLines != null)
                {
                    //Remark Sementara
                    //InventoryLinesTransaction transaction = new InventoryLinesTransaction();
                    //transaction.TransactionTypeId = RetailEnum.SalesTransaction;
                    //transaction.TransactionTypeName = "SalesTransaction";
                    //transaction.TransRefId = transactionApi.transactionId;
                    //transaction.Qty = -1 * transactionApi.transactionLines[i].quantity;
                    //transaction.TransactionLinesId = inventoryLines.Id;
                    //try
                    //{
                    //    transaction.TransactionDate = DateTime.ParseExact(transactionApi.timeStamp, "MMM dd, yyyy h:mm:ss tt", CultureInfo.InvariantCulture);
                    //}
                    //catch
                    //{
                    //    // transaction.TransactionDate = DateTime.ParseExact(transactionApi.timeStamp, "dd/MM/yyyy HH:mm:ss", CultureInfo.InvariantCulture);
                    //    transaction.TransactionDate = DateTime.ParseExact(transactionApi.date + transactionApi.time, "yyyy-MM-dd" + "H:mm:ss", CultureInfo.InvariantCulture);
                    //}

                    //_context.Add(transaction);
                    //await _context.SaveChangesAsync();
                    ////update qty
                    //inventoryLines.Qty = _context.InventoryLinesTransaction.
                    //                     Where(c => c.TransactionLinesId == inventoryLines.Id)
                    //                    .Select(c => c.Qty)
                    //                    .DefaultIfEmpty()
                    //                    .Sum();
                    //_context.InventoryLinesTransaction.Update(transaction);
                    //await _context.SaveChangesAsync();
                }
            }
        }
        public IActionResult PostTransaction([FromBody] WebAPIModel.Transaction transactionApi, string transactionIds)
        {
            LogRecord log = new LogRecord();

            log.TimeStamp = DateTime.Now;
            log.Tag       = "Transaction void";
            log.Message   = JsonConvert.SerializeObject(transactionApi);
            _context.LogRecord.Add(log);
            _context.SaveChanges();
            APIResponse response = new APIResponse();

            try
            {
                //List<Store> liststore = _context.Store.ToList();

                //var idx1 = storeindex(transactionApi.storeCode, liststore);
                //Store store = liststore[idx1];


                Store     store     = _context.Store.Where(c => c.Code == transactionApi.storeCode).First(); // coba
                StoreType storetype = _context.StoreType.Where(s => s.Id == store.StoreTypeId).FirstOrDefault();
                // Models.Transaction transaction = new Models.Transaction();
                Models.Transaction transaction = _context.Transaction.Where(x => x.TransactionId == transactionIds).First();
                transaction.CustomerId = 1;
                try
                {
                    Employee emp = _context.Employee.Where(c => c.EmployeeCode == transactionApi.employeeId).First();
                    transaction.EmployeeId   = emp.Id;
                    transaction.EmployeeCode = emp.EmployeeCode;
                    transaction.EmployeeName = emp.EmployeeName;
                }
                catch
                {
                    transaction.EmployeeId = 2;
                }
                transaction.MarginTransaction = 0;
                transaction.MethodOfPayment   = transactionApi.paymentType.ToString();
                transaction.Qty         = 0;
                transaction.RecieptCode = transactionApi.receiptId;
                transaction.Spgid       = 0;
                transaction.Text1       = transactionApi.spgId;
                transaction.StoreCode   = transactionApi.storeCode;
                transaction.StoreId     = store.Id;
                transaction.Status      = transactionApi.status;
                try
                {
                    transaction.CustomerCode = transactionApi.customerIdStore;
                }
                catch
                {
                    transaction.CustomerCode = "";
                }

                transaction.ClosingShiftId        = transactionApi.openShiftId;
                transaction.ClosingStoreId        = transactionApi.openStoreId;
                transaction.TransactionId         = transactionApi.transactionId;
                transaction.TotalAmounTransaction = transactionApi.total;
                transaction.TotalDiscount         = transactionApi.discount;
                transaction.TransactionId         = transactionApi.transactionId;
                transaction.Cash   = transactionApi.cash;
                transaction.Edc1   = transactionApi.Edc1;
                transaction.Edc2   = transactionApi.Edc2;
                transaction.Bank1  = transactionApi.Bank1;
                transaction.Bank2  = transactionApi.Bank2;
                transaction.NoRef1 = transactionApi.NoRef1;
                transaction.NoRef2 = transactionApi.NoRef2;
                transaction.Change = transactionApi.change;
                try
                {
                    transaction.TransactionDate = DateTime.ParseExact(transactionApi.timeStamp, "MMM dd, yyyy h:mm:ss tt", CultureInfo.InvariantCulture);
                }
                catch
                {
                    transaction.TransactionDate = DateTime.ParseExact(transactionApi.date + transactionApi.time, "yyyy-MM-dd" + "H:mm:ss", CultureInfo.InvariantCulture);
                }
                try
                {
                    var tglclosing = _context.ClosingStore.OrderByDescending(x => x.ClosingTimeStamp).Where(x => x.StoreCode == transactionApi.storeCode).First().ClosingTimeStamp;
                    if (tglclosing != DateTime.Now)
                    {
                        transaction.TransDateStore = tglclosing;
                    }
                    else
                    {
                        try
                        {
                            transaction.TransDateStore = DateTime.ParseExact(transactionApi.timeStamp, "MMM dd, yyyy h:mm:ss tt", CultureInfo.InvariantCulture);
                        }
                        catch
                        {
                            transaction.TransDateStore = DateTime.ParseExact(transactionApi.date + transactionApi.time, "yyyy-MM-dd" + "H:mm:ss", CultureInfo.InvariantCulture);
                        }
                    }
                }
                catch
                {
                }


                if (storetype.StoreInStore.Value == true)
                {
                    transaction.TransactionType = Config.RetailEnum.transactionStoreinStore; //true
                }
                else
                {
                    transaction.TransactionType = Config.RetailEnum.transactionStore; //false
                }
                try
                {
                    bool employeeInMaster = _context.Employee.Any(c => c.EmployeeCode == transactionApi.customerId);
                    if (employeeInMaster)
                    {
                        transaction.Text2           = transactionApi.customerId;
                        transaction.TransactionType = Config.RetailEnum.transactionEmployee;
                    }
                }
                catch
                {
                }
                //if (transaction.StoreCode.Equals("MBA") )
                //{
                //    transaction.TransactionType = Config.RetailEnum.transactionStoreinStore;
                //}
                //else
                //{
                //    transaction.TransactionType = Config.RetailEnum.transactionStore;
                //}



                if (!ModelState.IsValid)
                {
                    return(BadRequest(ModelState));
                }
                _context.Transaction.Update(transaction);
                _context.SaveChanges();
                // sequenceNumber(transactionApi);
                //log record


                //save Lines
                for (int i = 0; i < transactionApi.transactionLines.Count; i++)
                {
                    Models.TransactionLines transactionLines = new Models.TransactionLines();
                    transactionLines.TransactionId  = transaction.Id;
                    transactionLines.ArticleId      = transactionApi.transactionLines[i].article.articleId;
                    transactionLines.ArticleIdAlias = transactionApi.transactionLines[i].article.articleIdAlias;
                    transactionLines.ArticleName    = transactionApi.transactionLines[i].article.articleName;
                    transactionLines.UnitPrice      = transactionApi.transactionLines[i].price;
                    transactionLines.Amount         = transactionApi.transactionLines[i].subtotal;
                    transactionLines.Discount       = transactionApi.transactionLines[i].discount;
                    transactionLines.DiscountCode   = transactionApi.transactionLines[i].discountCode;
                    transactionLines.DiscountType   = transactionApi.transactionLines[i].discountType;
                    transactionLines.Qty            = transactionApi.transactionLines[i].quantity;
                    transactionLines.Spgid          = transactionApi.transactionLines[i].spgId;
                    _context.TransactionLines.Add(transactionLines);
                    _context.SaveChanges(); //7k ms
                }
                // _context.SaveChanges(); //5k ms
                response.code    = "1";
                response.message = "Sucess Add Data";
                inventory(transactionApi).Wait();
                // inventory(transactionApi).ConfigureAwait(false);
                sequenceNumber(transactionApi);
                //add for infor
                if (transaction.TransactionType == Config.RetailEnum.transactionStoreinStore)
                {
                    //  WebAPIInforController.InforAPITransactionInStoreController inforAPIController = new WebAPIInforController.InforAPITransactionInStoreController(_context);
                    //  inforAPIController.AddBatchHead(transactionApi, transaction.Id).Wait();
                }
                else
                {
                    //  WebAPIInforController.InforAPIController inforAPIController = new WebAPIInforController.InforAPIController(_context);
                    //  inforAPIController.postOrder(transactionApi, transaction.Id).Wait();
                }

                //coba
                //for (int i = 0; i < transactionApi.transactionLines.Count; i++)
                //{


                //}
            }
            catch (Exception ex)
            {
                response.code    = "0";
                response.message = ex.ToString();
            }



            return(Ok(response));
            //     return CreatedAtAction("GetTransaction", new { id = transaction.Id }, transaction);
        }