public async Task <bool> DeleteTaxSetupAsync(cor_taxsetup model)
        {
            var itemToDelete = await _dataContext.cor_taxsetup.FindAsync(model.TaxSetupId);

            if (itemToDelete != null)
            {
                _dataContext.cor_taxsetup.Remove(itemToDelete);
            }
            _dataContext.Entry(itemToDelete).CurrentValues.SetValues(model);
            return(await _dataContext.SaveChangesAsync() > 0);
        }
        public async Task <bool> AddUpdateTaxSetupAsync(cor_taxsetup model)
        {
            if (model.TaxSetupId > 0)
            {
                var itemToEdit = await _dataContext.cor_taxsetup.FindAsync(model.TaxSetupId);

                _dataContext.Entry(itemToEdit).CurrentValues.SetValues(model);
            }
            else
            {
                await _dataContext.cor_taxsetup.AddAsync(model);
            }
            return(await _dataContext.SaveChangesAsync() > 0);
        }
            public async Task <FileUploadRespObj> Handle(UploadTaxSetupCommand request, CancellationToken cancellationToken)
            {
                try
                {
                    var apiResponse = new FileUploadRespObj {
                        Status = new APIResponseStatus {
                            IsSuccessful = false, Message = new APIResponseMessage()
                        }
                    };

                    var files = _accessor.HttpContext.Request.Form.Files;

                    var byteList = new List <byte[]>();
                    foreach (var fileBit in files)
                    {
                        if (fileBit.Length > 0)
                        {
                            using (var ms = new MemoryStream())
                            {
                                await fileBit.CopyToAsync(ms);

                                byteList.Add(ms.ToArray());
                            }
                        }
                    }

                    var userId = _accessor.HttpContext.User?.FindFirst(x => x.Type == "userId").Value;
                    var user   = await _serverRequest.UserDataAsync();

                    var uploadedRecord = new List <TaxsetupObj>();
                    ExcelPackage.LicenseContext = LicenseContext.NonCommercial;

                    if (byteList.Count() > 0)
                    {
                        foreach (var byteItem in byteList)
                        {
                            using (MemoryStream stream = new MemoryStream(byteItem))
                                using (ExcelPackage excelPackage = new ExcelPackage(stream))
                                {
                                    ExcelWorksheet workSheet    = excelPackage.Workbook.Worksheets[0];
                                    int            totalRows    = workSheet.Dimension.Rows;
                                    int            totalColumns = workSheet.Dimension.Columns;

                                    if (totalColumns != 4)
                                    {
                                        apiResponse.Status.Message.FriendlyMessage = "4 Columns Expected";
                                        return(apiResponse);
                                    }

                                    for (int i = 2; i <= totalRows; i++)
                                    {
                                        var item = new TaxsetupObj
                                        {
                                            ExcelLineNumber                  = i,
                                            TaxName                          = workSheet.Cells[i, 1]?.Value != null ? workSheet.Cells[i, 1]?.Value.ToString() : string.Empty,
                                            SubGlName                        = workSheet.Cells[i, 2]?.Value != null ? workSheet.Cells[i, 2]?.Value.ToString() : string.Empty,
                                            Percentage                       = workSheet.Cells[i, 3]?.Value != null?Convert.ToDouble(workSheet.Cells[i, 3]?.Value.ToString()) : 0,
                                                                        Type = workSheet.Cells[i, 4]?.Value != null ? workSheet.Cells[i, 4]?.Value.ToString() : string.Empty,
                                        };
                                        uploadedRecord.Add(item);
                                    }
                                }
                        }
                    }


                    var ItemList = await _repo.GetAllTaxSetupAsync();

                    cor_taxsetup itemFrmRepo = new cor_taxsetup();
                    if (uploadedRecord.Count > 0)
                    {
                        foreach (var item in uploadedRecord)
                        {
                            if (string.IsNullOrEmpty(item.TaxName))
                            {
                                apiResponse.Status.Message.FriendlyMessage = $"Empty tax name detected on line {item.ExcelLineNumber}";
                                return(apiResponse);
                            }
                            if (string.IsNullOrEmpty(item.SubGlName))
                            {
                                apiResponse.Status.Message.FriendlyMessage = $"Sub Gl name is empty detected on line {item.ExcelLineNumber}";
                                return(apiResponse);
                            }
                            //if (item.Percentage < 1)
                            //{
                            //    apiResponse.Status.Message.FriendlyMessage = $"Sub Gl name is empty detected on line {item.ExcelLineNumber}";
                            //    return apiResponse;
                            //}
                            if (string.IsNullOrEmpty(item.Type))
                            {
                                apiResponse.Status.Message.FriendlyMessage = $"Type is empty detected on line {item.ExcelLineNumber}";
                                return(apiResponse);
                            }
                            itemFrmRepo = ItemList.FirstOrDefault(c => c.TaxName.ToLower().Trim() == item?.TaxName.ToLower().Trim());
                            if (itemFrmRepo != null)
                            {
                                itemFrmRepo.TaxName    = item?.TaxName;
                                itemFrmRepo.TaxSetupId = itemFrmRepo.TaxSetupId;
                                itemFrmRepo.Percentage = item.Percentage;
                                itemFrmRepo.SubGL      = itemFrmRepo.SubGL;
                                itemFrmRepo.Type       = item?.Type;

                                await _repo.AddUpdateTaxSetupAsync(itemFrmRepo);
                            }
                            else
                            {
                                var newItem = new cor_taxsetup();
                                newItem.TaxName    = item?.TaxName;
                                newItem.Percentage = item.Percentage;
                                newItem.SubGL      = item.SubGL;
                                newItem.Type       = item?.Type;
                                await _repo.AddUpdateTaxSetupAsync(newItem);
                            }
                        }
                    }
                    apiResponse.Status.IsSuccessful            = true;
                    apiResponse.Status.Message.FriendlyMessage = "Successful";
                    return(apiResponse);
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
        public async Task <TaxsetupRegRespObj> Handle(AddUpdateTaxsetupCommand request, CancellationToken cancellationToken)
        {
            var response = new TaxsetupRegRespObj {
                Status = new APIResponseStatus {
                    IsSuccessful = false, Message = new APIResponseMessage()
                }
            };

            try
            {
                if (request.TaxSetupId < 1)
                {
                    var item = _data.cor_taxsetup.Any(q => q.TaxName.Trim().ToLower() == request.TaxName.Trim().ToLower());
                    if (item)
                    {
                        response.Status.IsSuccessful            = false;
                        response.Status.Message.FriendlyMessage = $"Name Already exist";
                        return(response);
                    }
                }
                string[] Types = { "+", "-" };
                if (!Types.Contains(request.Type))
                {
                    response.Status.Message.FriendlyMessage = "Invalid Tax type";
                    return(response);
                }


                var user = await _serverRequest.UserDataAsync();

                cor_taxsetup sup = new cor_taxsetup();
                sup.Deleted    = true;
                sup.CreatedOn  = request.TaxSetupId > 0 ? (DateTime?)null : DateTime.Now;
                sup.CreatedBy  = user.UserName;
                sup.UpdatedBy  = user.UserName;
                sup.Percentage = request.Percentage;
                sup.SubGL      = request.SubGL;
                sup.Type       = request.Type;
                sup.Deleted    = false;
                sup.TaxName    = request.TaxName;
                sup.TaxSetupId = request.TaxSetupId > 0 ? request.TaxSetupId : 0;
                await _supRepo.AddUpdateTaxSetupAsync(sup);


                var actionTaken = request.TaxSetupId < 1 ? "created" : "updated";
                response.TaxSetupId                     = sup.TaxSetupId;
                response.Status.IsSuccessful            = true;
                response.Status.Message.FriendlyMessage = $"Successfully ";
                return(response);
            }
            catch (Exception ex)
            {
                #region Log error to file
                var errorCode = ErrorID.Generate(4);
                _logger.Error($"ErrorID : {errorCode} Ex : {ex?.Message ?? ex?.InnerException?.Message} ErrorStack : {ex?.StackTrace}");

                response.Status.IsSuccessful             = false;
                response.Status.Message.FriendlyMessage  = "Error occured!! Unable to delete item";
                response.Status.Message.TechnicalMessage = $"ErrorID : {errorCode} Ex : {ex?.Message ?? ex?.InnerException?.Message} ErrorStack : {ex?.StackTrace}";
                return(response);

                #endregion
            }
        }