/// <summary> /// Получение сгруппированного по наименованиям списка остатков /// </summary> /// <param name="filter"></param> /// <returns></returns> public List <BatchGroup> GetBatches(BatchFilter filter) { List <BatchGroup> batchGroups = new List <BatchGroup>(); Guid itemId = filter.ItemId; // Получаем все ids всех наименований var itemList = _siriusContext.Items.Select(i => new { i.Id, i.Name }); // Если в фильтре указан itemId, то производим отбор var items = itemId != Guid.Empty ? itemList.Where(i => i.Id == filter.ItemId).ToList() : itemList.ToList(); // Получаем остатки по каждому наименованию items.ForEach(i => { filter.ItemId = itemId != Guid.Empty ? filter.ItemId : i.Id; /** Получаем остатки в зависимости от значения параметра фильтра IsDynamic * Если значение false, то ищем в накопительном регистре StorageRegiter * При значении true высчитываем остатки по всем существующим регистрам проведённых накладных (возможно будет медленно) */ BatchGroup batchGroup = new BatchGroup() { Name = i.Name, Batches = filter.IsDynamic == true ? GetDynamicBatchesByFilter(filter).Result : GetStaticBatchesByFilter(filter) }; batchGroups.Add(batchGroup); }); return(batchGroups); }
public List <RecurringBatchDataViewModel> GetBatchViewListForExport(BatchFilter batchFilter) { try { var batchData = new List <RecurringBatchDataViewModel>(); var batchList = batchRepository.GetBatchList(batchFilter); foreach (var batch in batchList) { var batchDataViewModel = new RecurringBatchDataViewModel { BatchStatus = batch.BatchStatus, BatchId = batch.Id, BatchDate = batch.CreateDateTime, BatchNumber = batch.MerchantAssignedBatchNumber, MerchantDbaName = batch.DbaName, MerchantNationalId = batch.AuxiliaryField02, MerchantNumber = batch.MerchantAgreementNumber }; if (batch.BatchStatus == BatchStatus.Processed) { batchDataViewModel.TotalAmount = batch.BatchReport.BatchTotalAmount; } batchData.Add(batchDataViewModel); } return(batchData); } catch (Exception exception) { //logger.LogError("Unexpected error occurred when filtering and mapping RecurringBatch", exception); return(null); } }
/// <summary> /// Копирование регистров в целевую накладную /// </summary> /// <param name="sourceInvoiceId"></param> /// <param name="destinationInvoiceId"></param> /// <returns></returns> public IEnumerable <Register> CopyRegisters(Guid sourceInvoiceId, Guid destinationInvoiceId) { //ПОЯСНЕНИЕ: //Item - позиция //Batch - остаток //Invoice - накладная //Register - регистр //Получаем регисты их исходной накладной (шаблона) var registers = _unitOfWork.RegisterRepository.GetByInvoiceId(sourceInvoiceId); registers.ToList().ForEach(reg => { // Получаем остатки по позиции и остатку текущего регистра var filter = new BatchFilter() { ItemId = reg.ItemId }; var batches = _unitOfWork.RegisterRepository.GetDynamicBatchesByFilter(filter).GetAwaiter().GetResult(); // Вызываем метод копирования AddCopiedRegister(new Register() { InvoiceId = destinationInvoiceId, ItemId = reg.ItemId, Amount = reg.Amount }, batches); }); _unitOfWork.Save(); var result = GetRegistersByInvoiceId(destinationInvoiceId) .Select(r => new Register() { Id = r.Id, InvoiceId = r.InvoiceId, ItemId = r.ItemId, Amount = r.Amount, Cost = r.Cost }); return(result); }
/// <summary> /// Получить запись регистра по Id наименования /// </summary> /// <param name="id"></param> /// <returns></returns> public Task <IEnumerable <Batch> > GetBatchesByItemId(Guid id) { var filter = new BatchFilter() { ItemId = id }; return(_unitOfWork.RegisterRepository.GetDynamicBatchesByFilter(filter)); }
public IActionResult GetBatch(BatchFilter filter) { var batches = _siriusService.GetBatch(filter); if (batches != null) { return(Ok(batches)); } return(NotFound()); }
public RecurringBatchViewModel GetBatchViewWithPaging(BatchFilter batchFilter) { try { var batchData = new List <RecurringBatchDataViewModel>(); var batchPagination = batchRepository.GetPagedBatchList(batchFilter); foreach (var batch in batchPagination.Batches) { var batchDataViewModel = new RecurringBatchDataViewModel { BatchStatus = batch.BatchStatus, BatchId = batch.Id, BatchDate = batch.CreateDateTime, BatchNumber = batch.MerchantAssignedBatchNumber, MerchantDbaName = batch.DbaName, MerchantNationalId = batch.AuxiliaryField02, MerchantNumber = batch.MerchantAgreementNumber }; if (batch.BatchStatus == BatchStatus.Processed) { batchDataViewModel.TotalAmount = batch.BatchReport.BatchTotalAmount; } batchData.Add(batchDataViewModel); } return(new RecurringBatchViewModel { Batches = batchData, Filter = batchFilter, Pagination = new PaginationViewModel { CurrentPage = batchPagination.CurrentPage, IsNextPage = batchPagination.IsNextPage, IsPreviousPage = batchPagination.IsPreviousPage, TotalCount = batchPagination.TotalCount, TotalPages = batchPagination.TotalPages, PaginationFunctionUrl = "RecurringBatch/GetPage" } }); } catch (Exception exception) { //logger.LogError("Unexpected error occurred when filtering and mapping RecurringBatch", exception); return(null); } }
public IActionResult Index(Guid?viewBatch) { defaultBatchFilter = new BatchFilter { TextSearch = string.Empty, From = clock.Now.AddDays(-30), To = clock.Now, PageNumber = 1, PageSize = paginationConfiguration.Value.NumberOfRecordsPerPage, OpenBatch = viewBatch }; SetSessionFilter(defaultBatchFilter); var model = recurringBatchesManager.GetBatchViewWithPaging(defaultBatchFilter); return(View(model)); }
public IEnumerable <Batch> GetStaticBatchesByFilter(BatchFilter filter) { var result = _siriusContext.StorageRegisters .Include(r => r.Item) .Where(r => (r.ItemId == filter.ItemId) && (filter.CategoryId != Guid.Empty ? r.Item.CategoryId == filter.CategoryId : true) && // Если в фильтре указана выборка по критическим остаткам (filter.isMinimumLimit ? r.Amount <= _siriusContext.Items.FirstOrDefault(x => x.Id == r.ItemId).MinimumLimit : true)) .OrderBy(r => r.Item.CategoryId) .Select(sr => new Batch { Amount = sr.Amount, Cost = sr.Cost }) .ToList(); return(result.Select(b => new Batch { Amount = Math.Round(b.Amount, 2), Cost = b.Cost })); }
public ActionResult BatchFilter(BatchFilter batchFilter) { if (!ModelState.IsValid) { var errorList = (from item in ModelState where item.Value.Errors.Any() select item.Value.Errors[0].ErrorMessage).ToList(); var returnString = errorList.Aggregate(string.Empty, (current, error) => current + $"<div class='error'>{error}</div>"); return(Content(returnString)); } batchFilter.PageSize = paginationConfiguration.Value.NumberOfRecordsPerPage; SetSessionFilter(batchFilter); var model = recurringBatchesManager.GetBatchViewWithPaging(batchFilter); return(PartialView("_BatchData", model)); }
/// <summary> /// Получить остатки согласно критериям фильтрации /// </summary> /// <param name="filter"></param> /// <returns></returns> public IEnumerable <object> GetBatches(BatchFilter filter) { var batches = _unitOfWork.RegisterRepository.GetBatches(filter); string fileDownloadName = Path.Combine(Directory.GetCurrentDirectory(), "report.xlsx"); using (var package = CreateExcelPackage(batches)) { try { package.SaveAs(new FileInfo(fileDownloadName)); } catch (AppException ex) { return(batches); } } return(batches); }
/// <summary> /// Получение остатков по критериям фильтрации /// </summary> /// <param name="filter"></param> /// <returns></returns> public async Task <IEnumerable <Batch> > GetDynamicBatchesByFilter(BatchFilter filter) { List <Batch> result = new List <Batch>(); var t1 = Guid.Empty; var t2 = DateTime.MinValue; // Получаем регистры прихода var registers = await _siriusContext.Registers .Include(r => r.Item) .Include(r => r.Invoice) .Where(r => (r.ItemId == filter.ItemId) && (r.Invoice.IsFixed == true) && (r.Invoice.Factor > 0) && (filter.CategoryId != Guid.Empty ? r.Item.CategoryId == filter.CategoryId : true) && (filter.VendorId != Guid.Empty ? r.Invoice.VendorId == filter.VendorId : true)) .OrderBy(r => r.Invoice.Date) .ToListAsync(); List <Batch> batches = new List <Batch>(); registers.ForEach(reg1 => { decimal cost = reg1.Cost; double amount = reg1.Amount; registers.ForEach(reg2 => { if (reg1.Id != reg2.Id && reg1.Cost == reg2.Cost) { amount += reg2.Amount; } }); batches.Add(new Batch() { Amount = Math.Round(amount, 2), Cost = cost }); }); IEnumerable <Batch> arrivalBatch = batches.Distinct(); // Получаем регистры расхода batches = new List <Batch>(); registers = await _siriusContext.Registers .Include(r => r.Item) .Include(r => r.Invoice) .Where(r => (r.ItemId == filter.ItemId) && (r.Invoice.IsFixed == true) && (r.Invoice.Factor < 0) && (r.Item.IsCountless == false) && (filter.CategoryId != Guid.Empty ? r.Item.CategoryId == filter.CategoryId : true) && (filter.VendorId != Guid.Empty ? r.Invoice.VendorId == filter.VendorId : true)) .OrderBy(r => r.Invoice.Date) .ToListAsync(); registers.ForEach(reg1 => { decimal cost = reg1.Cost; double amount = reg1.Amount; registers.ForEach(reg2 => { if (reg1.Id != reg2.Id && reg1.Cost == reg2.Cost) { amount += reg2.Amount; } }); batches.Add(new Batch() { Amount = Math.Round(amount, 2), Cost = cost }); }); IEnumerable <Batch> writeOffBatch = batches.Distinct(); // Вычисляем остатки путём вычитания расходных значений из приходных arrivalBatch.ToList().ForEach(ab => { writeOffBatch.ToList().ForEach(wb => { if (ab.Cost == wb.Cost) { ab.Amount = ab.Amount - wb.Amount; } }); if (ab.Amount != 0) { result.Add(ab); } }); // Убираем совпадения, фильтруем по цене result = result.Distinct().Where(b => (filter.Cost != 0 ? b.Cost == filter.Cost : true)).ToList(); return(result); }
/// <summary> /// Получить 1 остаток согласно критериям фильтрации /// </summary> /// <param name="filter"></param> /// <returns></returns> public object GetBatch(BatchFilter filter) { return(_unitOfWork.RegisterRepository.GetDynamicBatchesByFilter(filter).Result.FirstOrDefault()); }
public RecurringBatchPaginationList GetPagedBatchList(BatchFilter filter) { // TODO : implement access to database or data service var rand = new Random(); var batchList = new List <Batch>(); for (var i = 0; i < 1500; i++) { var batch = new Batch { Id = i == 0 ? Guid.Parse("37d16b94-3345-4149-bed7-35135df18379") : Guid.NewGuid(), BatchStatus = i % 2 == 0 ? BatchStatus.Processed : BatchStatus.Open, BatchClosingDateTime = DateTime.Now, CreateDateTime = DateTime.Now.AddDays(-1 * i), DbaName = $"Sjonna búð {i}", MerchantAgreementNumber = i.ToString().PadLeft(6, '0'), MerchantCity = "Reykjavík", MerchantAssignedBatchNumber = "123456789", MerchantCountry = "352", MerchantName = $"Sjonni {i} HF", MerchantPostCode = "112", MerchantTypeMccCode = "2388", ProcessingEndTime = DateTime.Now, ProcessingStartTime = DateTime.Now, TerminalId = rand.Next(1000, 10000).ToString(), AuxiliaryField01 = Guid.NewGuid().ToString(), AuxiliaryField02 = "1912822999" }; if (i % 2 == 0) { batch.BatchReport = new BatchReport { BatchStatus = batch.BatchStatus, BatchId = batch.Id, AuthorizedBatchAmount = 1000, AuxiliaryField01 = batch.AuxiliaryField01, AuxiliaryField02 = batch.AuxiliaryField02, BatchTotalAmount = 1200, DbaName = batch.DbaName, MerchantAgreementNumber = batch.MerchantAgreementNumber, MerchantAssignedBatchNumber = batch.MerchantAssignedBatchNumber, MerchantName = batch.MerchantName, NumberOfAuthorizedTransactions = 10, ProcessingStartTime = batch.CreateDateTime.AddSeconds(10), ProcessingEndTime = batch.CreateDateTime.AddSeconds(20), TotalNumberOfTransactions = 12 }; } batchList.Add(batch); } var filteredByDate = batchList.Where(x => x.CreateDateTime > filter.From && x.CreateDateTime < filter.To).ToList(); if (!string.IsNullOrEmpty(filter.TextSearch)) { batchList = filteredByDate.Where( x => x.DbaName.ToLower().Contains(filter.TextSearch.ToLower()) || x.MerchantAgreementNumber.ToLower().Contains(filter.TextSearch.ToLower()) || x.MerchantName.ToLower().Contains(filter.TextSearch.ToLower()) || x.TerminalId.ToLower().Contains(filter.TextSearch.ToLower())).ToList(); } var recurringBatchPaginationList = new RecurringBatchPaginationList { TotalCount = batchList.Count, CurrentPage = filter.PageNumber, }; recurringBatchPaginationList.TotalPages = (int)Math.Ceiling(recurringBatchPaginationList.TotalCount / (double)filter.PageSize); recurringBatchPaginationList.Batches = batchList.Skip((recurringBatchPaginationList.CurrentPage - 1) * filter.PageSize).Take(filter.PageSize).ToList(); recurringBatchPaginationList.IsPreviousPage = filter.PageNumber > 1; recurringBatchPaginationList.IsNextPage = filter.PageNumber < recurringBatchPaginationList.TotalPages; return(recurringBatchPaginationList); }
public List <Batch> GetBatchList(BatchFilter filter) { // TODO : implement access to database or data service var rand = new Random(); var batchList = new List <Batch>(); for (var i = 0; i < 40; i++) { var batch = new Batch { Id = Guid.NewGuid(), BatchStatus = i % 2 == 0 ? BatchStatus.Processed : BatchStatus.Open, BatchClosingDateTime = DateTime.Now, CreateDateTime = DateTime.Now.AddDays(-1 * i), DbaName = $"Sjonna búð {i}", MerchantAgreementNumber = i.ToString().PadLeft(6, '0'), MerchantCity = "Reykjavík", MerchantAssignedBatchNumber = "123456789", MerchantCountry = "352", MerchantName = $"Sjonni {i} HF", MerchantPostCode = "112", MerchantTypeMccCode = "2388", ProcessingEndTime = DateTime.Now, ProcessingStartTime = DateTime.Now, TerminalId = rand.Next(1000, 10000).ToString(), AuxiliaryField01 = Guid.NewGuid().ToString(), AuxiliaryField02 = "1912822999" }; if (i % 2 == 0) { batch.BatchReport = new BatchReport { BatchStatus = batch.BatchStatus, BatchId = batch.Id, AuthorizedBatchAmount = 1000, AuxiliaryField01 = batch.AuxiliaryField01, AuxiliaryField02 = batch.AuxiliaryField02, BatchTotalAmount = 1200, DbaName = batch.DbaName, MerchantAgreementNumber = batch.MerchantAgreementNumber, MerchantAssignedBatchNumber = batch.MerchantAssignedBatchNumber, MerchantName = batch.MerchantName, NumberOfAuthorizedTransactions = 10, ProcessingStartTime = batch.CreateDateTime.AddSeconds(10), ProcessingEndTime = batch.CreateDateTime.AddSeconds(20), TotalNumberOfTransactions = 12 }; } batchList.Add(batch); } var filteredByDate = batchList.Where(x => x.CreateDateTime > filter.From && x.CreateDateTime < filter.To).ToList(); if (!string.IsNullOrEmpty(filter.TextSearch)) { batchList = filteredByDate.Where( x => x.DbaName.ToLower().Contains(filter.TextSearch.ToLower()) || x.MerchantAgreementNumber.ToLower().Contains(filter.TextSearch.ToLower()) || x.MerchantName.ToLower().Contains(filter.TextSearch.ToLower()) || x.TerminalId.ToLower().Contains(filter.TextSearch.ToLower())).ToList(); } return(batchList); }