예제 #1
0
        public async Task <IActionResult> UpdateEformReport([FromBody] EformReportFullModel eformReportModel)
        {
            if (!await _permissionsService.CheckEform(eformReportModel.EformReport.TemplateId,
                                                      AuthConsts.EformClaims.EformsClaims.UpdateJasperReport))
            {
                return(Forbid());
            }

            return(Ok(await _eformReportsService.UpdateEformReport(eformReportModel)));
        }
        public async Task <OperationResult> UpdateEformReport(EformReportFullModel requestModel)
        {
            try
            {
                //using (var transaction = await _dbContext.Database.BeginTransactionAsync())
                //                {
                //try
                //{
                var eformReport = _dbContext.EformReports
                                  .FirstOrDefault(x => x.Id == requestModel.EformReport.Id);

                if (eformReport == null)
                {
                    return(new OperationResult(false,
                                               _localizationService.GetString("EformReportNotFound")));
                }

                eformReport.Description = requestModel.EformReport.Description;
                if (!string.IsNullOrEmpty(requestModel.EformReport.HeaderImage))
                {
                    eformReport.HeaderImage = Encoding.UTF8.GetBytes(requestModel.EformReport.HeaderImage);
                }

                eformReport.HeaderVisibility    = requestModel.EformReport.HeaderVisibility;
                eformReport.IsDateVisible       = requestModel.EformReport.IsDateVisible;
                eformReport.IsWorkerNameVisible = requestModel.EformReport.IsWorkerNameVisible;

                _dbContext.EformReports.Update(eformReport);
                await _dbContext.SaveChangesAsync();

                var elementList = requestModel.EformMainElement?.ElementList;
                if (elementList == null)
                {
                    return(new OperationResult(false,
                                               _localizationService.GetString("ElementListNotProvided")));
                }

                var dataItems = ParseElements(elementList);
                if (dataItems.Any())
                {
                    var dataItemsIds   = dataItems.Select(x => x.Id).ToArray();
                    var eformDataItems = await _dbContext.EformReportDataItems
                                         .Where(x => dataItemsIds.Contains(x.Id)).ToListAsync();

                    foreach (var eformDataItem in eformDataItems)
                    {
                        var dataItem = dataItems.FirstOrDefault(x => x.Id == eformDataItem.Id);
                        if (dataItem != null)
                        {
                            eformDataItem.Position   = dataItem.Position;
                            eformDataItem.Visibility = dataItem.Visibility;
                            _dbContext.EformReportDataItems.Update(eformDataItem);
                        }
                    }

                    await _dbContext.SaveChangesAsync();
                }

                //transaction.Commit();
                //}
                //catch (Exception)
                //{
                //transaction.Rollback();
                //    throw;
                //}
                //}

                return(new OperationResult(true,
                                           _localizationService.GetString("ReportUpdatedSuccessfully")));
            }
            catch (Exception e)
            {
                _logger.LogCritical(e, e.Message);
                return(new OperationResult(false,
                                           _localizationService.GetString("ErrorWhileUpdatingReport")));
            }
        }
        public async Task <OperationDataResult <EformReportFullModel> > GetEformReport(int templateId)
        {
            try
            {
                var result = new EformReportFullModel();
                var core   = await _coreHelper.GetCore();

                await using var dbContext = core.DbContextHelper.GetDbContext();

                var localeString = await _userService.GetCurrentUserLocale();

                var language = dbContext.Languages.Single(x => x.LanguageCode == localeString);
                var template = await core.ReadeForm(templateId, language);

                if (template == null)
                {
                    return(new OperationDataResult <EformReportFullModel>(false,
                                                                          _localizationService.GetString("TemplateNotFound")));
                }

                var eformReport = await _dbContext.EformReports
                                  .FirstOrDefaultAsync(x => x.TemplateId == templateId);

                if (eformReport == null)
                {
                    eformReport = new EformReport
                    {
                        TemplateId          = template.Id,
                        IsDateVisible       = true,
                        IsWorkerNameVisible = true,
                    };
                    _dbContext.EformReports.Add(eformReport);
                    await _dbContext.SaveChangesAsync();
                }

                var reportElements = await _dbContext.EformReportElements
                                     .Include(x => x.DataItems)
                                     .ThenInclude(x => x.NestedDataItems)
                                     .Include(x => x.NestedElements)
                                     .ThenInclude(x => x.DataItems)
                                     .ThenInclude(x => x.NestedDataItems)
                                     .Where(x => x.EformReportId == eformReport.Id)
                                     .ToListAsync();


                var reportElementsOrdered = new List <EformReportElementModel>();
                foreach (var templateElement in template.ElementList)
                {
                    var reportElement = reportElements
                                        .FirstOrDefault(p => p.ElementId == templateElement.Id);

                    if (reportElement == null)
                    {
                        reportElement = new EformReportElement()
                        {
                            EformReportId = eformReport.Id,
                            ElementId     = templateElement.Id,
                        };
                        _dbContext.EformReportElements.Add(reportElement);
                        await _dbContext.SaveChangesAsync();

                        reportElement = await _dbContext.EformReportElements
                                        .Include(x => x.DataItems)
                                        .ThenInclude(x => x.NestedDataItems)
                                        .Include(x => x.NestedElements)
                                        .ThenInclude(x => x.DataItems)
                                        .ThenInclude(x => x.NestedDataItems)
                                        .Where(x => x.EformReportId == eformReport.Id && x.ElementId == templateElement.Id)
                                        .FirstOrDefaultAsync();
                    }


                    var element = new EformReportElementModel()
                    {
                        Id        = reportElement.Id,
                        ElementId = reportElement.ElementId,
                        Label     = templateElement.Label,
                    };
                    if (templateElement.GetType() == typeof(DataElement))
                    {
                        var item         = (DataElement)templateElement;
                        var dataItemList = GetReportDataItemList(_dbContext, reportElement, null,
                                                                 item.DataItemList.Select(x => (object)x).ToList());
                        element.DataItemList = dataItemList;
                    }

                    if (templateElement.GetType() == typeof(GroupElement))
                    {
                        var item        = (GroupElement)templateElement;
                        var elementList = GetReportElementsList(_dbContext, reportElement,
                                                                item.ElementList.Select(x => (object)x).ToList());
                        element.ElementList = elementList;
                    }

                    reportElementsOrdered.Add(element);
                }

                result.EformMainElement = new EformMainElement()
                {
                    Id          = template.Id,
                    Label       = template.Label,
                    ElementList = reportElementsOrdered
                };
                var eformReportModel = new EformReportModel()
                {
                    Id          = eformReport.Id,
                    TemplateId  = eformReport.TemplateId,
                    Description = eformReport.Description,
                    HeaderImage = eformReport.HeaderImage == null
                        ? string.Empty
                        : Encoding.UTF8.GetString(eformReport.HeaderImage),
                    HeaderVisibility    = eformReport.HeaderVisibility,
                    IsDateVisible       = eformReport.IsDateVisible,
                    IsWorkerNameVisible = eformReport.IsWorkerNameVisible,
                };
                result.EformReport = eformReportModel;

                result.EformMainElement = new EformReportHelper().AddPageBreaks(result.EformMainElement);

                return(new OperationDataResult <EformReportFullModel>(true, result));
            }
            catch (Exception e)
            {
                _logger.LogCritical(e, e.Message);
                return(new OperationDataResult <EformReportFullModel>(false,
                                                                      _localizationService.GetString("ErrorWhileObtainingReportInfo")));
            }
        }