Beispiel #1
0
        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)));
        }
Beispiel #2
0
        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));
            }
        }
Beispiel #3
0
        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));
            }
        }