public async Task <IActionResult> EditExportSettings(long id) { var dto = await _companyBusinessManager.GetExportSettings(id); if (dto == null) { return(NotFound()); } var company = await _companyBusinessManager.GetCompany(dto.CompanyId ?? 0); ViewBag.CompanyName = company.Name; return(View(_mapper.Map <CompanyExportSettingsViewModel>(dto))); }
public async Task <IActionResult> Export(long id, ReportFilterViewModel model) { try { if (!ModelState.IsValid) { throw new Exception("Form is not valid!"); } var settings = await _companyBusinessManager.GetExportSettings(id); if (settings == null) { return(NotFound()); } var result = await _reportBusinessManager.GetAgingReport(model.CompanyId, model.Date, _daysPerPeriod, model.NumberOfPeriods, settings.IncludeAllCustomers); var mem = new MemoryStream(); var writer = new StreamWriter(mem); var csvWriter = new CsvWriter(writer, CultureInfo.InvariantCulture); //csvWriter.Configuration.Delimiter = ";"; //csvWriter.Configuration.HasHeaderRecord = true; //csvWriter.Configuration.AutoMap<ExpandoObject>(); var fields = settings.Fields.OrderBy(x => x.Sort);//.Concat(columns); foreach (var field in fields) { if (field.IsActive) { csvWriter.WriteField <string>(field.Value); } } csvWriter.NextRecord(); #region SORT BY ACCOUNT NUMBER/CUSTOMER BUSINESS NAME var sortedInvoices = result.Rows; if (settings.Sort == 0) { sortedInvoices = sortedInvoices.OrderBy(x => x.AccountNo).ToList(); } else { sortedInvoices = sortedInvoices.OrderBy(x => x.Customer.Name).ToList(); } #endregion foreach (var row in sortedInvoices) { foreach (var field in fields) { if (field.IsActive) { var matchSumField = Regex.Matches(field.Name, matchFieldSumExpression, RegexOptions.IgnoreCase); //check for regex. get values between curly braces {} if (matchSumField.Count > 0) { var fieldName = field.Name; foreach (var match in matchSumField.ToList()) { var key = match.Value.Trim(new char[] { '{', '}' }); var value = row.Data.ContainsKey(key) ? row.Data[key] : ObjectExtension.GetPropValue(row, key); fieldName = fieldName.Replace(match.Value, (value ?? 0).ToString(), StringComparison.OrdinalIgnoreCase); } var data = Convert.ToDecimal(new DataTable().Compute(fieldName, null)); csvWriter.WriteField(data == 0 ? settings.DefaultValueIfEmpty : data.ToString()); } else { var value = ObjectExtension.GetPropValue(row, field.Name); //TODO: Здесь нужно сделать проверку на массив и взять его значение //if(value.GetType() == typeof(Array)) { // Console.WriteLine("Array"); //} var data = row.Data.ContainsKey(field.Name) ? row.Data[field.Name].ToString() : value; csvWriter.WriteField(data == null || data.Equals("0") ? settings.DefaultValueIfEmpty : data); } } } csvWriter.NextRecord(); } writer.Flush(); mem.Position = 0; var fileName = settings.Title; var matchFileName = Regex.Match(fileName, matchFileNameExpression, RegexOptions.IgnoreCase); if (matchFileName.Success) { string template = matchFileName.Value.Trim(new char[] { '{', '}', '$' }); var date = model.Date.ToString(template, DateTimeFormatInfo.InvariantInfo); fileName = Regex.Replace(fileName, matchFileNameExpression, matchFileName.Value.Contains('$') ? date.ToUpper() : date, RegexOptions.IgnoreCase); } FileStreamResult fileStreamResult = new FileStreamResult(mem, "application/octet-stream"); fileStreamResult.FileDownloadName = fileName; return(fileStreamResult); } catch (Exception er) { return(BadRequest(er.Message ?? er.StackTrace)); } }
public async Task <IActionResult> CreateSavedReport([FromBody] SavedReportViewModel model) { try { if (!ModelState.IsValid) { throw new Exception("Form is not valid!"); } var report = await _reportBusinessManager.GetAgingReport(model.CompanyId, model.Date, 30, model.NumberOfPeriods, false); var customerTypes = await _customerBusinessManager.GetCustomerTypes(); var fields = new List <SavedReportFieldDto>(); #region CUSTOMERS foreach (var field in report.CustomerTotal.Keys) { fields.Add(new SavedReportFieldDto() { Name = field, Count = report.CustomerTotal[field], }); } #endregion #region CUSTOMER TYPES foreach (var ctype in customerTypes) { fields.Add(new SavedReportFieldDto() { Name = ctype.Name, Count = report.CustomerTypes.ContainsKey(ctype.Name) ? report.CustomerTypes[ctype.Name] : 0 }); } #endregion #region BALANCE TOTAL foreach (var column in report.Cols) { fields.Add(new SavedReportFieldDto() { Name = column.Name, Count = report.BalanceTotal[column.Name].Count, Amount = report.BalanceTotal[column.Name].Sum }); } #endregion #region FILES var files = new List <SavedReportFileDto>(); if (model.ExportSettings != null) { foreach (var settingId in model.ExportSettings) { var settings = await _companyBusinessManager.GetExportSettings(settingId); if (settings != null) { var file = await GetExportData(model.CompanyId, model.Date, model.NumberOfPeriods, settings); if (file != null) { var fileName = settings.Title; var match = Regex.Match(fileName, @"(?:\$)?\{.*?\}", RegexOptions.IgnoreCase); if (match.Success) { string template = match.Value.Trim(new char[] { '{', '}', '$' }); var date = model.Date.ToString(template, DateTimeFormatInfo.InvariantInfo); fileName = Regex.Replace(fileName, @"(?:\$)?\{.*?\}", match.Value.Contains('$') ? date.ToUpper() : date, RegexOptions.IgnoreCase); } // var fileDate = Regex.Replace(model.Date.ToString("d", DateTimeFormatInfo.InvariantInfo), @"\b(?<month>\d{1,2})/(?<day>\d{1,2})/(?<year>\d{2,4})\b", settings.Title, RegexOptions.IgnoreCase); files.Add(new SavedReportFileDto() { Name = fileName, File = file }); } } } } #endregion var dto = _mapper.Map <SavedReportDto>(model); dto.ApplicationUserId = new Guid(User.FindFirstValue(ClaimTypes.NameIdentifier)); dto.Fields = fields; dto.Files = files; var result = await _reportBusinessManager.CreateSavedFactReport(dto); return(Ok(result)); } catch (Exception er) { return(BadRequest(er.Message ?? er.StackTrace)); } }